home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 1 / ACE CD 1.iso / files / docs / blitzbad.lha / BlitzBasic2V1.3Part1.doc < prev    next >
Text File  |  1994-12-13  |  114KB  |  3,444 lines

  1.  
  2.  
  3.                         BLITZ BASIC 2 LIBRARY GUIDE V1.3
  4.  
  5.                           Last updated on: 16-10-1994
  6.                             written by Jurgen Valks
  7.                   mail me for futher updates: j.valks@sbos.nl
  8.  
  9.             NOW INCLUDING THE BUM MAGAZINE COMMANDS!!: Thanks Simon!
  10.  
  11.                                  Make a choice
  12.  
  13.              ALL PD/UPDATE COMMANDS            
  14.  
  15.              SEE ALL THE PD LIBRARIES INCLUDED 
  16.                          BUM MAGAZINES 1-6 / COMMANDS      
  17.              BUM 7                             
  18.              INFO                              
  19.  
  20.      This file contains all the commands of the following libraries:
  21.  
  22.                   CIA-TRACKER LIBRARY  
  23.                   COMMODITIES LIBRARY  
  24.                   ELMORE LIBRARY       
  25.                   FX LIBRARY           
  26.                   FNS LIBRARY          
  27.                   FUNC LIBRARY         
  28.                   GFX LIBRARY          
  29.                   PACK LIBRARY         
  30.                   PCF LIBRARY          
  31.                   REQ LIBRARY          
  32.                   RIANIM LIBRARY       
  33.                   TOOLTYPES LIBRARY    
  34.                   TRACKDISK LIBRARY    
  35.                   WB LIBRARY           
  36.                   ZONE-JOY LIBRARY     
  37.  
  38.  
  39. ============================================
  40. =    T R A C K D I S K    L I B R A R Y    =
  41. ============================================
  42.  
  43. (C)1994 Reflective Images
  44.  
  45. Written by Steve Matty.
  46.  
  47. You can do whatever the hell you like to this library but must still
  48. give me some credit!
  49.  
  50. Command List :
  51.  
  52.                  CLOSEDISK    
  53.                  MOTORON      
  54.                  MOTOROFF     
  55.                  =FORMATTRACK 
  56.                  =OPENDISK    
  57.                  =READSECTOR  
  58.                  =WRITESECTOR 
  59.                  =WRITEBOOT   
  60.  
  61.  
  62.  
  63.  
  64. Command : OpenDisk
  65. --------------------------------------------------------------------------
  66. Modes  : Amiga
  67. Syntax : success=OpenDisk(unit#)
  68.  
  69. This attempts to open unit 'unit#' of the trackdisk.device, for use with
  70. the other commands in this library. A return value of 0 indicates 
  71. failure, -1 indicates success.
  72.  
  73.  
  74. Statement : MotorOn
  75. --------------------------------------------------------------------------
  76. Modes  : Amiga
  77. Syntax : MotorOn unit#
  78.  
  79. This attempts to switch the drive motor on of the previously opened
  80. trackdisk unit (called with OpenDisk). You must call this command
  81. before attempting to ReadSector/WriteSector/FormatTrack/WriteBoot
  82.  
  83.  
  84. Statement : MotorOff
  85. --------------------------------------------------------------------------
  86. Modes  : Amiga
  87. Syntax : MotorOff unit#
  88.  
  89. This turns the drive motor of 'unit#' off.
  90.  
  91.  
  92. Command : ReadSector
  93. --------------------------------------------------------------------------
  94. Modes  : Amiga
  95. Syntax : [success=]ReadSector(unit#,sector#,buffer[,numsectors])
  96.  
  97. This attempts to read 'numsectors' sectors from a trackdisk device which
  98. has been opened with OpenDisk and has its Motor On. If numsectors is
  99. omitted then 1 sector is read. The data is read into the memory location
  100. pointed to by 'buffer'.
  101.  
  102. WARNING! Please MAKE SURE the MOTOR is _ON_ otherwise, all hell will break
  103. loose!!!
  104.  
  105.  
  106. Command : WriteSector
  107. --------------------------------------------------------------------------
  108. Modes  : Amiga
  109. Syntax : [success=]WriteSector(unit#,sector#,buffer[,numsectors])
  110.  
  111. This is the same as ReadSector except........... it writes! (and no, I 
  112. am not being lazy by not typing any decent docs)
  113.  
  114.  
  115. Command : FormatTrack
  116. --------------------------------------------------------------------------
  117. Modes  : Amiga
  118. Syntax : [success=]FormatTrack(unit#,track#,buffer[,numtracks])
  119.  
  120. This does a TD_FORMAT on the specified track number. Buffer should point
  121. to the area of memory which the track should be formatted with. I don't
  122. know why this command exists - but hey, it might come in useful.
  123.  
  124.  
  125. Statement : CloseDisk
  126. --------------------------------------------------------------------------
  127. Modes  : Amiga
  128. Syntax : CloseDisk unit#
  129.  
  130. This closes the trackdisk.device of the specified unit#. The Motor is
  131. automatically switched off if it is already on.
  132.  
  133.  
  134.  
  135. Command : WriteBoot
  136. --------------------------------------------------------------------------
  137. Modes  : Amiga
  138. Syntax : [success=]WriteBoot(unit#[,buffer])
  139.  
  140. This writes 1kilobyte of data to the bootblock of the specified disk unit.
  141. The optional buffer parameter should point to an area of memory with which
  142. to write the bootblock.
  143.  
  144.  
  145. RIAnim Library v1.0
  146. ===================
  147.  
  148. By Stephen McNamara
  149. (c)1994 Reflective Images
  150.  
  151.  RIANIM COMMANDS 
  152.  
  153. This library enables the playback of both Anim5 and Anim7 format
  154. animations.  It allows you to playback animations at any co-ordinate in a
  155. bitmap and supports different palettes for frames of the animation.  It
  156. also allows you to playback animations from FAST ram, thus you can now play
  157. massive animations that can only fit in FAST ram.
  158.  
  159. When playing back animations you must make sure that your display is
  160. double-buffered.  Please refer to the Blitz manual for information about
  161. how anims can be played back properly - or look at the example program
  162. included with this file.
  163.  
  164. Note: there may still be a few bugs in the animation playback routines - if
  165. you have any problems or spot any bugs then please contact us at the
  166. address given in the main file of this archive.
  167.  
  168.  
  169.  
  170.             These are the RIANIM library commands:
  171.  
  172.  
  173.                  ANIMLOOP         
  174.                  RIANIMINIT       
  175.                  RINEXTANIMFRAME  
  176.                  =RIANIMINIT      
  177.                  =RINEXTANIMFRAME 
  178.  
  179.  
  180.  
  181. Statement/Function: RIAnimInit
  182. --------------------------------------------------------------------------
  183. Modes : Amiga/Blitz
  184. Syntax: [suc=]RIAnimInit(address,bitmap#,palette#[,xy_offset])
  185.  
  186. This command attempts to take an animation held in memory (CHIP or FAST)
  187. and identify it as a supported animation format.  If it identifies it 
  188. okay it will set up the animation by unpacking frame 1 of the anim onto 
  189. the specified bitmap and copying the palette to the specified palette 
  190. object.
  191.  
  192. You must ensure that the bitmap is big and deep enough to actually hold
  193. the animation.  At the moment there is no checking of the bitmap size.  
  194. The palette object you give is automatically resized to the size of the 
  195. palette in the animation.
  196.  
  197. The optional parameter allows you to play an animation at an offset into
  198. a bitmap.  Thus you could center a half screen animation on a bitmap.  
  199. The offset is given as a byte offset from the start of each bitplane.  
  200. It is calculated like this:
  201.  
  202.             offset=(X/8)+(Y*(pixel_width/8))
  203.  
  204.             where: X and Y are your co-ordinates
  205.                    pixel_width is the width of your bitmap.
  206.  
  207. If used as a function, this command returns true for a successful
  208. initialise or false for failure.
  209.  
  210.  
  211. Statement/Function: RINextAnimFrame
  212. ------------------------------------------------------------------------
  213. Modes : Amiga/Blitz
  214. Syntax: [suc=]RINextAnimFrame bitmap#
  215.  
  216. This command attempts to unpack the next frame of a previously
  217. initialised animation onto the specified bitmap.  It returns true or 
  218. false to say whether it succeeded or not.
  219.  
  220.  
  221. Statement: AnimLoop
  222. ------------------------------------------------------------------------
  223. Modes : Amiga/Blitz
  224. Syntax: AnimLoop ON|OFF
  225.  
  226.   This command allows you to control the looping mode of the animation.
  227. With animloop off, playback of an animation will stop at the last frame 
  228. of it. Any attempt to draw another frame will fail.  With it on, 
  229. though, the animation will loop around.
  230.  
  231. Note: you must ensure that your animation has loop frames at the end of
  232. it if you want to loop the animation around.  The reverse of this is 
  233. true for animloop off - the animation must not have loop frames if you 
  234. don't want it to loop around.  If you select animloop off but have 
  235. looping frames in your anim then the animation will end by displaying a 
  236. copy of frame 2 of the animation.
  237.  
  238.  
  239.  
  240.  
  241. --------------------------------------------------------------------------
  242. ====          Reflective Images Commodities Library V0.9 (C)1994      ====
  243. --------------------------------------------------------------------------
  244.  
  245.  COMMODITIES COMMANDS 
  246.  
  247. Introduction
  248. ============
  249.  
  250. This library allows the easy use of Commodities. It requires Kickstart 2
  251. or higher.
  252.  
  253.  
  254.  
  255.                  The COMMODITIES library commands:
  256.  
  257.                  EXCHANGEAPPEAR     
  258.                  EXCHANGEDISAPPEAR  
  259.                  EXCHANGEENABLE     
  260.                  EXCHANGEDISABLE    
  261.                  EXCHANGEKILL       
  262.                  EXCHANGECHANGELIST 
  263.                  EXCHANGEUNIQUE     
  264.                  MAKECOMMODITY      
  265.                  SETSTATUS          
  266.                  SETHOTKEY          
  267.                  =HOTKEYHIT         
  268.                  =COMMODITYEVENT    
  269.                  =EXCHANGEMESSAGE   
  270.                  =CXAPPEAR          
  271.                  =CXDISAPPEAR       
  272.                  =CXENABLE          
  273.                  =CXDISABLE         
  274.                  =CXKILL            
  275.                  =CXCHANGELIST      
  276.                  =CXUNIQUE          
  277.  
  278.  
  279. Function : MakeCommodity
  280. --------------------------------------------------------------------------
  281. Modes  : Amiga
  282. Syntax : success=MakeCommodity(name$,title$,description$)
  283.  
  284. This command attempts to add your Commodity to the list of commodities.
  285. A return value of -1 indicates success, 0 means failure. (not enough 
  286. memory)
  287.  
  288. name$ refers to the name of the Commodity and it should be unique. This
  289. is the name that appears when running the Commodity Exchange program.
  290. title$ is the title of your program, e.g. "My Screen Blanker".
  291. description$ is a brief description of your program.
  292.  
  293. The Commodity Exchange program will then have 'name$' in its list of
  294. Commodities and when a user clicks on your commodity, it will display
  295. the title$ and description$. 
  296.  
  297.  
  298. Function : SetHotKey
  299. --------------------------------------------------------------------------
  300. Modes  : Amiga
  301. Syntax : success=SetHotKey(hotkey#,hotkeydescription$)
  302.  
  303. This will add a hotkey event to your commodity so that after a hotkey
  304. has been pressed you can find out which one.
  305.  
  306. e.g.        success=SetHotKey(0,"lalt lshift a")
  307.  
  308.  
  309. Function : HotKeyHit
  310. --------------------------------------------------------------------------
  311. Modes  : Amiga
  312. Syntax : hitkeynum=HotKeyHit
  313.  
  314. This will return the number of the hot key which has been hit since the
  315. last 'CommodityEvent' was called, or -1 if no such hotkey has been 
  316. activated.
  317.  
  318.  
  319. Function : CommodityEvent
  320. --------------------------------------------------------------------------
  321. Modes  : Amiga
  322. Syntax : anyevent=CommodityEvent
  323.  
  324. This looks to see if either
  325.     a) A hotkey has been pressed
  326.     b) A message from Exchange has been received
  327.  
  328. and returns -1 if such an event occurred, of 0 is nothing has yet 
  329. happened. This should be inside a Repeat-Until loop, e.g.
  330.  
  331.     Repeat
  332.       VWait
  333.       ev.l=Event
  334.       ce.l=CommodityEvent
  335.       hk.l=HotKeyHit        ; This must be used after                                         
  336.     Until ev or ce or hk            ; CommodityEvent
  337.  
  338.  
  339.  
  340. Statement : SetStatus
  341. --------------------------------------------------------------------------
  342. Modes  : Amiga
  343. Syntax : SetStatus on|off
  344.  
  345. This sets the status of your Commodity to either Active (on) or Inactive
  346. (off) - this can be seen by running the Commodities Exchange program.
  347.  
  348.  
  349. Function : ExchangeMessage
  350. --------------------------------------------------------------------------
  351. Modes  : Amiga
  352. Syntax : messnum.l=ExchangeMessage
  353.  
  354. This looks to see if the Commodities Exchange has issued you with as 
  355. message, e.g. Hide Interface, Show Interface. It returns the message ID 
  356. of the incoming message or 0 for no message.
  357.  
  358.  
  359. Functions: CxAppear/CxDisAppear/CxEnable/CxDisable
  360.                       CxKill/CxChangeList/CxUnique
  361. --------------------------------------------------------------------------
  362. Modes : Amiga
  363.  
  364. These are to be used in conjunction with ExchangeMessage, ie
  365.  
  366.     em.l=ExchangeMessage
  367.     Select em
  368.       Case CxAppear
  369.         Gosub _appear
  370.       Case CxDisAppear
  371.             Gosub _disappear
  372.         End Select
  373.  
  374. The functions merely return the ID value associated with that particular
  375. Commodities Exchange message.
  376.  
  377.  
  378. Functions: ExchangeAppear/ExchangeDisAppear/ExchangeEnable/
  379. ExchangeDisable/ExchangeKill/ExchangeChangeList/ExchangeUnique
  380. --------------------------------------------------------------------------
  381.  
  382. Modes : Amiga
  383.  
  384. To be used in conjunction with ExchangeMessage, ie
  385.  
  386.     em.l=ExchangeMessage
  387.     If em
  388.       If ExchangeAppear then Gosub _appear
  389.       If ExchangeDisAppear then Gosub _dispappear
  390.     EndIf
  391.  
  392. This is intended as an alternative way of acting upon Exchange Messages.
  393.  
  394.  
  395. ;------------------------------
  396. ;- WB library version 0.9     -
  397. ;- ©1994 Reflective Images    -
  398. ;------------------------------
  399.  
  400.  WB COMMANDS 
  401.  
  402. This small library provides quick and easy to use commands for accessing
  403. AppWindows, AppIcons and AppMenus.
  404.  
  405. * PLEASE NOTE * 
  406. This library must have at least V37+ of Workbench/DOS/Icon libraries
  407.  
  408. This version of the library only enables you to read the FIRST file
  409. dragged to an AppWindow/AppIcon or selected from an AppMenu - future
  410. versions will have additional commands AppWindowArg/AppIconArg/
  411. AppMenuArg which returns the filename of the specified arg. E.g. 
  412. f$=AppIconArg(1)
  413.  
  414.  
  415.                                 The WB commands:
  416.  
  417.                  APPEVENT       
  418.                  APPWINDOWEVENT 
  419.                  APPICONEVENT   
  420.                  APPMENUEVENT   
  421.                  ADDAPPWINDOW   
  422.                  ADDAPPICON     
  423.                  ADDAPPMENU     
  424.                  DELAPPWINDOW   
  425.                  DELAPPICON     
  426.                  DELAPPMENU     
  427.                  APPWINDOWFILE  
  428.                  APPICONFILE    
  429.                  APPICONHIT     
  430.                  APPMENUFILE    
  431.                  APPMENUHIT     
  432.  
  433.  
  434. Function : AppEvent
  435. --------------------------------------------------------------------------
  436. Modes  : Amiga
  437. Syntax : status=AppEvent
  438.  
  439. This command checks the msg ports of any open AppIcons/AppWindows/
  440. AppMenus and if an event has been passed, returns -1. 0 indicates no 
  441. event has occurred.
  442.  
  443. e.g.
  444.     Repeat
  445.       VWait
  446.     Until AppEvent
  447.  
  448.  
  449. Function : AppWindowEvent
  450. --------------------------------------------------------------------------
  451. Modes  : Amiga
  452. Syntax : status=AppWindowEvent
  453.  
  454. This command checks the msg ports of any open AppWindows and if an event
  455. has been passed, returns -1. 0 indicates no event has occurred.
  456.  
  457. e.g.
  458.     Repeat
  459.       VWait
  460.     Until AppWindowEvent
  461.  
  462.  
  463. Function : AppIconEvent
  464. --------------------------------------------------------------------------
  465. Modes  : Amiga
  466. Syntax : status=AppIconEvent
  467.  
  468. This command checks the msg ports of any AppIcons and if an event has 
  469. been passed, returns -1. 0 indicates no event has occurred.
  470.  
  471. e.g.
  472.     Repeat
  473.       VWait
  474.     Until AppIconEvent
  475.  
  476.  
  477. Function : AppMenuEvent
  478. --------------------------------------------------------------------------
  479. Modes  : Amiga
  480. Syntax : status=AppMenuEvent
  481.  
  482. This command checks the msg ports of any AppMenus and if an event has 
  483. been passed, returns -1. 0 indicates no event has occurred.
  484.  
  485. e.g.
  486.     Repeat
  487.       VWait
  488.     Until AppMenuEvent
  489.  
  490.  
  491. Function : AddAppWindow
  492. --------------------------------------------------------------------------
  493. Modes  : Amiga
  494. Syntax : success=AddAppWindow(windownumber)
  495.  
  496. This command attempts to make the window specified by 'windownumber' to 
  497. become an AppWindow. -1 means success, 0 means failure. There is a 
  498. currently limit of 4 AppWindows.
  499.  
  500.  
  501. Function : AddAppIcon
  502. --------------------------------------------------------------------------
  503. Modes  : Amiga
  504. Syntax : success=AddAppIcon(id,text$,iconname$)
  505.  
  506. This command attempts to place an AppIcon onto the Workbench desktop.
  507. ID is a unique identification number. Text$ is text to display 
  508. underneath the AppIcon and Iconname$ is the name of the file to use the
  509. Icon imagery. -1 means success, 0 means failure.
  510.  
  511. e.g.
  512.     suc=AddAppIcon(0,"Test","Work:Test")
  513.     If suc=0 Then End
  514.  
  515.  
  516. Function : AddAppMenu
  517. --------------------------------------------------------------------------
  518. Modes  : Amiga
  519. Syntax : success=AddAppMenu(id,text$)
  520.  
  521. This command tries to add 'text$' to the Tools menu of Workbench.
  522. ID is a unique identification number. Returns -1 for success, 0 for 
  523. failure. 
  524.  
  525. e.g.
  526.     suc=AddAppMenu(0,"Blitz2")
  527.     If suc=0 Then End
  528.  
  529.  
  530.  
  531. Function : AppWindowFile
  532. --------------------------------------------------------------------------
  533. Modes  : Amiga
  534. Syntax : filename$=AppWindowFile(windownumber)
  535.  
  536. This command returns the complete path of the file which was dragged to 
  537. the AppWindow. If the file was in fact a directory a '/' is appended.
  538. An empty string signifies nothing was Dragged.
  539.  
  540.  
  541. Function : AppIconFile
  542. --------------------------------------------------------------------------
  543. Modes  : Amiga
  544. Syntax : filename$=AppIconFile(id)
  545.  
  546. This command returns the complete path of the file which was dragged to 
  547. the AppIcon. If the file was in fact a directory a '/' is appended.
  548. An empty string signifies nothing was Dragged.
  549.  
  550.  
  551. Function : AppMenuFile
  552. --------------------------------------------------------------------------
  553. Modes  : Amiga
  554. Syntax : filename$=AppMenuFile(id)
  555.  
  556. This command returns the complete path of the file which was selected 
  557. when the AppMenu was hit. If the file was in fact a directory a '/' is 
  558. appended. An empty string signifies nothing was selected.
  559.  
  560.  
  561. Function : AppIconHit
  562. --------------------------------------------------------------------------
  563. Modes  : Amiga
  564. Syntax : status=AppIconHit(id)
  565.      idnumber=AppIconHit
  566.  
  567. This command returns the status of the AppIcon <id>. -1 = The icon was
  568. doubleclicked, 0 = nothing has happened.
  569.  
  570. If no argument is supplied, the function returns the number of the
  571. doubleclicked icon, or -1 for none.
  572.  
  573.  
  574. Function : AppMenuHit
  575. --------------------------------------------------------------------------
  576. Modes  : Amiga
  577. Syntax : status=AppMenuHit(id)
  578.      idnumber=AppMenuHit
  579.  
  580. This returns the status of the AppMenu item <id>. -1 = This menu
  581. item was selected, 0 = This menu item was not selected.
  582. If no argument is given, the function returns the numbe of the
  583. selected menu item, or -1 for none.
  584.  
  585.  
  586. Function : DelAppWindow/DelAppIcon/DelAppMenu
  587. --------------------------------------------------------------------------
  588. Modes  : Amiga
  589. Syntax : success=DelAppWindow[(number)]
  590.      success=DelAppIcon[(id)]
  591.      success=DelAppMenu[(id)]
  592.  
  593. These commands will remove the AppWindow/AppIcon/AppMenu from the system
  594. and free up the associated message ports.
  595.  
  596. *** IMPORTANT *** You must call DelAppWindow BEFORE closing a window,
  597. or your machine will GURU!
  598.  
  599.  
  600.             Reflective Images Tooltypes Library
  601.             ===================================
  602.  
  603.                                    Release #2
  604.  
  605.  TOOLTYPES COMMANDS 
  606.  
  607. By Stephen McNamara, inspired by the collection of tooltype functions by
  608. Mark Tiffany.
  609.  
  610. (c)1994 Reflective Images
  611.  
  612. This library contains commands to allow the reading, comparing and 
  613. setting of tooltypes in a .info file.  All tooltype names are case 
  614. insignificant but as a general sort of rule they should really be 
  615. completely uppercase.
  616.  
  617. This library attempts to open the system Icon.library, if the opening of
  618. this library fails ALL commands in this library will be unusable.  
  619. Almost every function in this library relies on the Icon.library 
  620. completely.
  621.  
  622. Changed commands: 
  623.  
  624. FindToolValue - now returns "" if the tooltype was found but did not 
  625.                 have a value (e.g. DONOTWAIT).  You should now use
  626.                 FindToolType to check for the existance of a tooltype 
  627.                 and then use FindToolValue to get its value.
  628.  
  629. PutIconObject - now has an optional parameter that lets you set the type
  630.                 of the file.  See SetIconType for more information
  631.                 about possible values for this command.
  632.  
  633.  
  634. Command list:
  635.                  GETICONOBJECT   
  636.                  PUTICONOBJECT   
  637.                  FREEICONOBJECT  
  638.                  FINDTOOLVALUE   
  639.                  FINDTOOLNUMBER  
  640.                  ICONDEFAULTTOOL 
  641.                  ICONRENDER      
  642.                  MATCHTOOLVALUE  
  643.                  SETICONHIT      
  644.                  SETICONTYPE     
  645.                  SETTOOLVALUE    
  646.                  SHAPETOICON     
  647.                  NEWTOOLTYPE     
  648.                  CLEARTOOLTYPES  
  649.                  =FINDTOOLTYPE   
  650.  
  651.  
  652.  
  653. Statement: SetIconHit
  654. --------------------------------------------------------------------------
  655. Modes  : Amiga
  656. Syntax : SetIconHit width#,height#
  657.  
  658. This command sets the size of the 'hit-box' around the image in the
  659. currently loaded .info file.  This is only of use if your info file has 
  660. an image associated with it.  You should note that the hit box should 
  661. never be smaller, horizontally or vertically, than the actual size of 
  662. the image.
  663.  
  664. When Workbench renders an image for a file onto a window, it 
  665. automatically puts a 3d box border around it. The size of the hit box
  666. determines the size of this border.  Your image will always be located 
  667. in the top left border of the hit box.
  668.  
  669.  
  670. Statement: ShapeToIcon
  671. --------------------------------------------------------------------------
  672. Modes  : Amiga
  673. Syntax : ShapeToIcon shape#[,shape#]
  674.  
  675. This command lets you change the images associated with the currently
  676. loaded .info file.  What it does is to set up the .info file in memory 
  677. so that when it is saved out next, the images you give are saved out 
  678. with it. 
  679.  
  680. Using this command does not actually copy any shape data around memory, 
  681. all it does it place a pointer in the .info to the shape data. You 
  682. should therefore not delete a shape WITHOUT first saving the .info file
  683. to disk (that is of course if you want to keep your changes).
  684.  
  685. When you use this command, the hit box area for the .info file is
  686. automatically set to the size of the first shape given.  It is 
  687. important, therefore, that the second shape is not larger than the 
  688. first. When you give a second shape, this shape is set up to be the 
  689. 'alternate render' image, this means that this is the second image 
  690. associated with the .info file (remember the two windows in the 
  691. IconEditor?)
  692.  
  693.  
  694. Statement: SetIconType
  695. --------------------------------------------------------------------------
  696. Modes  : Amiga
  697. Syntax : SetIconType type#
  698.  
  699. This command lets you specify the type of the file associated with the
  700. currently loaded .info file.  The type describes whether or not the file
  701. is a tool or project etc...., and can take the following values:
  702.  
  703.             1    Disk
  704.             2    Drawer
  705.             3    Tool
  706.             4    Project
  707.             5    Trashcan
  708.  
  709. This command is identical to the menu in the IconEditor 'Type'.
  710.  
  711.  
  712. Statement: IconRender
  713. --------------------------------------------------------------------------
  714. Modes  : Amiga
  715. Syntax : IconRender mode#
  716.  
  717. This command lets you specify what Workbench should do to the icons
  718. image when the user clicks on it.  It lets you choose whether a separate
  719. image should be displayed or whether the current image should just be
  720. modified.  Mode# is made up of several different values that should be
  721. added together to create different effects, these are:
  722.  
  723.             0    Complement the select box
  724.             1    Draw a box around the image
  725.             2    Draw the alternate image
  726.             3    Don't highlight
  727.             4    Double image icon
  728.  
  729. Thus if you wanted an icon to change to a second image when selected, 
  730. and the icon has a second image, you would set the render to 6 (4+2).  
  731. This would mean that you had a second image (4) and that you wanted it 
  732. to be displayed when you select the icon (2).
  733.  
  734. Note: when you use ShapeToIcon with two shape numbers the IconRender is
  735. automatically set to 6.
  736.  
  737.  
  738. Statement: IconDefaultTool
  739. --------------------------------------------------------------------------
  740. Modes  : Amiga
  741. Syntax : IconDefaultTool tool$
  742.  
  743. This command lets you set the default tool for the current .info file.
  744. The default tool only applies for project files (see SetIconType) and is
  745. the program that is run when you double click the icon file (e.g. all
  746. Blitz2 source code files saved out with icons have the default tool
  747. 'Blitz2:Blitz2').
  748.  
  749. This command can be used to make a file saved out by your program
  750. double-clickable.  I have used it myself to make map files saved out 
  751. from my editor automatically load the editor when selected.
  752.  
  753.  
  754. Statement: FindToolType
  755. --------------------------------------------------------------------------
  756. Modes  : Amiga
  757. Syntax : bool=FindToolType (tool$)
  758.  
  759. This command simply returns true or false to say whether or not the 
  760. given tooltype was found in the currently loaded .info file.
  761.  
  762.  
  763. Statement/Function: GetIconObject
  764. ------------------------------------------------------------------------
  765. Modes  : Amiga
  766. Syntax : GetIconObject filename$
  767.      suc.l=GetIconObject (filename$)
  768.  
  769. This command reads in a .info file from disk.  The filename given will
  770. have '.info' added to the end of it and will be loaded into memory (chip 
  771. or fast depending on what is available for allocation) as a diskobject.
  772. Please refer to the Amiga hardware includes for information about the
  773. diskobject structure (or see your Blitz Basic Amigalibs resident file).
  774.  
  775. If used as a function, this command will return either FALSE for failure
  776. or the address of the allocated diskobject in memory.
  777.  
  778.  
  779. Statement/Function: PutIconObject
  780. ------------------------------------------------------------------------
  781. Modes  : Amiga
  782. Syntax : PutIconObject filename$
  783.      suc.l=PutIconObject (filename$)
  784.  
  785. This command takes a diskobject structure reserved and initialised by
  786. GetIconObject and saves it out to disk as a .info file for the specified
  787. file.  
  788.  
  789. All current tooltypes and values will be saved with the file. The 
  790. optional parameter allows you to set the type of the file associated
  791. with the .info file.  See SetIconType for possible values for this
  792. parameter.  Note that if you leave out this parameter the icontype will 
  793. not be changed.
  794.  
  795.  
  796. Statement/Function: FreeIconObject
  797. ------------------------------------------------------------------------
  798. Modes  : Amiga
  799. Syntax : FreeIconObject
  800.      suc.l=FreeIconObject
  801.  
  802. This command will free up the diskobject that is currently being used.
  803. It will not save out any tooltype changes and will free up the memory
  804. without ANY changes being made to the .info file loaded from disk.
  805.  
  806.  
  807. Function: FindToolValue
  808. ------------------------------------------------------------------------
  809. Modes  : Amiga
  810. Syntax : toolval$=FindToolValue(tooltype$)
  811.  
  812. This function returns the value of the selected tooltype.  The return
  813. value is a string, and is the part of the tooltype string after the "="
  814. in the tooltype entry.  The tooltype$ string that you pass can be in 
  815. either lower case or uppercase since all testing in done in uppercase, 
  816. although as a general rule, all tooltypes should be in uppercase.
  817.  
  818. This function will return a null string if the named tooltype was not
  819. found in the list of tooltypes for the file.  If the selected tooltype 
  820. did not have an actual value (e.g. DONOTWAIT) then this function will 
  821. return the string "!!".
  822.  
  823.  
  824. Function: FindToolNumber
  825. ------------------------------------------------------------------------
  826. Modes  : Amiga
  827. Syntax : toolval$=FindToolNumber(tooltype$)
  828.  
  829. This command will return the FULL tooltype string in the selected
  830. tooltype position.  If the tooltype number does not exist then "" will 
  831. be returned.
  832.  
  833.   Example:    tooltypes: "DONOTWAIT"
  834.                "CLOCKX=157"
  835.  
  836.     FindToolNumber(0) will return "DONOTWAIT"
  837.     FindToolNumber(1) will return "CLOCKX"
  838.     FindToolNumber(49) will return ""
  839.  
  840.  
  841. Function: MatchToolValue
  842. ------------------------------------------------------------------------
  843. Modes  : Amiga
  844. Syntax : suc.l=MatchToolValue(tooltype$,value$)
  845.  
  846. This command searchs the current list of tooltypes for the selected
  847. tooltype and, if found, attempts to match the values of it with the 
  848. given value.  This command uses the operating system call 
  849. MatchToolType(), it is able to cope with a tool having more than one
  850. value,
  851.  
  852.           e.g. LANGUAGE=ENGLISH|FRENCH
  853.             (the | is used to show OR, thus this tooltype
  854.              means that LANGUAGE equals ENGLISH or FRECH)
  855.         When using match toolvalue with this tooltype, TRUE will
  856.                 be returned when you use value$="ENGLISH" or "FRENCH" 
  857.                 but not (I think) both.
  858.  
  859. You should note that for this command, the case of VALUE$ is 
  860. insignificant.
  861.  
  862.  
  863. Statement/Function: SetToolValue
  864. ------------------------------------------------------------------------
  865. Modes  : Amiga
  866. Syntax : SetToolValue tooltype$,value$
  867.      suc.l=SetToolValue (tooltype$,value$)
  868.  
  869. This command will attempt to set a tooltype that is currently defined to
  870. the specified value.  When used as a function, this command will return
  871. TRUE for success or FALSE for failure, possible failures include: no 
  872. icon file loaded and tooltype not found.  When used, this command 
  873. attempts to allocate memory to store the new tooltype information in, 
  874. it does not attempt to free up the old memory allocated to the tooltype.
  875.  
  876. This means that you should keep alterations of tooltypes to a minimum.  
  877. The best way to manage tooltypes is:
  878.  
  879.         1. Open the icon
  880.         2. Read the tooltypes
  881.         3. Close the icon
  882.         4. ... do your program ...
  883.         5. Open the icon
  884.         6. Alter the tooltypes
  885.         7. Save the icon
  886.  
  887. Using this series of events, you'll keep memory usage (which will be
  888. fairly small anyway...) to the very minimum.
  889.  
  890.  
  891. Statement/Function: NewToolType
  892. ------------------------------------------------------------------------
  893. Modes  : Amiga
  894. Syntax : NewToolType tooltype$,value$
  895.      suc.l=NewToolType (tooltype$,value$)
  896.  
  897. This command allocates a new tooltype in the currently loaded .info file
  898. and sets its value.  No check is done to see is the tooltype already
  899. exists and the new tooltype is added to the end of the current list of
  900. tooltypes.
  901.  
  902.  
  903. Statement: ClearToolTypes
  904. ------------------------------------------------------------------------
  905. Modes  : Amiga
  906. Syntax : ClearToolTypes
  907.  
  908. This command is used to clear all the tooltype information from the
  909. currently loaded .info file.  It does not attempt, though, to free up 
  910. all the memory reserved to store tooltype names and values, you should
  911. therefore not used this command too many times in a row.  Once you have
  912. used this command, any attempt to read tooltype values will fail.
  913.  
  914.  
  915. ;------------------------------
  916. ;- ReqLib.library version 0.9 -
  917. ;- ©1994 Reflective Images    -
  918. ;------------------------------
  919.  
  920.  REQ COMMANDS 
  921.  
  922. The well known Req.Library for the Amiga is one of the best file 
  923. requesters around, so I wrote this small lib to enable Blitz users to 
  924. have Req requesters in their programs with the minimum of hassle.
  925.  
  926. * PLEASE NOTE * That this library must have at least v2.2 of the 
  927. Req.Library available.
  928.  
  929.  
  930. Command List:
  931.                  REQOUTPUT      
  932.                  REQFILEREQUEST 
  933.                  REQFILELOC     
  934.  
  935.                      REQ FLAGS, STRUCTURE 
  936.  
  937.  
  938. Statement: ReqOutput
  939. --------------------------------------------------------------------------
  940. Modes  : Amiga
  941. Syntax : ReqOutput windownumber
  942.  
  943. This command sets the ReqLib.library to put all requesters onto the
  944. window specified by <windownumber>. If this command is not called
  945. then the requesters will appear on the Default Public Screen.
  946.  
  947.  
  948. Function: ReqFileRequest
  949. --------------------------------------------------------------------------
  950. Modes :  Amiga Syntax :  pathname$=ReqFileRequest([title$[,flags]])
  951.  
  952. This opens up the standard file requester. If <title$> is given then
  953. the text will appear on the requester title bar.
  954. The optional <flags> parameter specifies a flag setting (see below)
  955. for use. If this is omitted then the last flag setting is used.
  956.  
  957.  
  958. Function: ReqFileLoc
  959. ------------------------------------------------------------------
  960. Modes  : Amiga/Blitz
  961. Syntax : memorylocation.l=ReqFileLoc
  962.  
  963. This simply returns the address in memory where the Req.Library file 
  964. requester stucture is located.
  965.  
  966.  
  967. FLAGS
  968. =====
  969.  
  970. Below is a list of possible flag settings and a brief description of each.
  971.  
  972.  
  973. #FRQSHOWINFOB     = %1   ;Set to show .info files. Default is not.
  974. #FRQEXTSELECTB    = %10   ;Extended select.  Default is not.
  975. #FRQCACHINGB      = %100   ;Directory caching.  Default is not.
  976. #FRQGETFONTSB     = %1000   ;Font requester rather than a file requester.
  977. #FRQINFOGADGETB   = %10000   ;Hide-info files gadget.
  978. #FRQHIDEWILDSB    = %100000   ;DON'T want 'show' and 'hide' string gadgets.
  979. #FRQABSOLUTEXYB   = %1000000   ;Use absolute x,y positions rather than centering on mouse.
  980. #FRQCACHEPURGEB   = %10000000   ;Purge the cache whenever the directory date stamp changes if this is set.
  981. #FRQNOHALFCACHEB  = %100000000   ;Don't cache a directory unless it is completely read in when this is set.
  982. #FRQNOSORTB       = %1000000000   ;DON'T want sorted directories.
  983. #FRQNODRAGB       = %10000000000  ;DON'T want a drag bar and depth gadgets.
  984. #FRQSAVINGB       = %100000000000  ;Are selecting a file to save to.
  985. #FRQLOADINGB      = %1000000000000  ;Are selecting a file(s) to load from.
  986. #FRQDIRONLYB      = %10000000000000  ;Allow the user to select a directory, rather than a file.
  987.  
  988.  
  989. STRUCTURE
  990. =========
  991.  
  992. Below is a description of the Req.Library file requester structure.
  993.  
  994. STRUCTURE    AFileRequester,0
  995.     UWORD    frq_VersionNumber        ;MUST BE REQVERSION!!!!!!!!!!!!!!!!!!
  996.  
  997.     ;You will probably want to initialize these three variables.
  998.     APTR    frq_Title        ; Hailing text
  999.     APTR    frq_Dir            ; Directory array (must be DSIZE+1 characters long)
  1000.     APTR    frq_File        ; Filename array (must be FCHARS+1 characters long)
  1001.                     ; If you initialize this variable then the file requester will place the complete path name in here on exit.
  1002.     APTR    frq_PathName        ; Complete path name array - (must be DSIZE+FCHARS+2 long)
  1003.                     ; If you want the file requester to pop up on your custom screen, put one of your window pointers here.
  1004.                     ; Or better yet, you can leave this field zeroed and put a pointer to one of your windows in the
  1005.                     ; pr_WindowPtr field in your process structure.
  1006.     APTR    frq_Window        ; Window requesting or NULL
  1007.                     ; Initialize these to the number of lines and columns you want to appear in the inner window that
  1008.                     ; displays the file names.  If you leave these set to zero then default values will be used.
  1009.     UWORD    frq_MaxExtendedSelect    ; Zero implies a maximum of 65535, as long as FRQEXTSELECT is set.
  1010.     UWORD    frq_numlines        ; Number of lines in file window.
  1011.     UWORD    frq_numcolumns        ; Number of columns in file window.
  1012.     UWORD    frq_devcolumns        ; Number of columns in device window.
  1013.     ULONG    frq_Flags        ; Various - umm - flags.  See above for more info.
  1014.     UWORD    frq_dirnamescolor    ;These five colors will all default
  1015.     UWORD    frq_filenamescolor    ;to color one if you don't specify
  1016.     UWORD    frq_devicenamescolor    ;a color (ie; if you specify color zero).
  1017.     UWORD    frq_fontnamescolor    ;If you want color zero to be used, specify
  1018.     UWORD    frq_fontsizescolor    ;color 32, or some other too large number
  1019.                     ;which mods down to zero.
  1020.  
  1021.     UWORD    frq_detailcolor        ;If both of these colors are specified as
  1022.     UWORD    frq_blockcolor        ;zero then the block pen will be set to one.
  1023.  
  1024.     UWORD    frq_gadgettextcolor    ;The color for the text of the five boolean gadgets.  Defaults to 1.
  1025.     UWORD    frq_textmessagecolor    ;The color for the message at the screen top.  Defaults to 1.
  1026.     UWORD    frq_stringnamecolor    ;The color for the words Drawer, File, Hide and Show.  Defaults to 3.
  1027.     UWORD    frq_stringgadgetcolor    ;The color for the borders of the string gadgets.  Defaults to 3.
  1028.                     ;Unfortunately it is not possible to specify
  1029.                     ;the color of the actual text in an Intuition
  1030.                     ;string gadget.
  1031.     UWORD    frq_boxbordercolor    ;The color for the boxes around the file and directory areas.  Defaults to 3.
  1032.     UWORD    frq_gadgetboxcolor    ;The color for the boxes around the five boolean gadgets.  Defaults to 3.
  1033.  
  1034.     STRUCT    frq_RFU_Stuff,36    ;This area, which is reserved for
  1035.                     ;future use, should all be zero.
  1036.  
  1037.     STRUCT    frq_DirDateStamp,ds_SIZEOF    ; A copy of the cached directories date stamp.
  1038.                         ; There should never be any need to change this.
  1039.  
  1040.     UWORD    frq_WindowLeftEdge;    ;These two fields are only used when the
  1041.     UWORD    frq_WindowTopEdge;    ;FRQABSOLUTEXY flag is set.  They specify
  1042.                     ;the location of the upper left hand
  1043.                     ;corner of the window.
  1044.  
  1045.     UWORD    frq_FontYSize        ;These fields are used to return the selected
  1046.     UWORD    frq_FontStyle        ;font size and style, only applicable when the
  1047.                     ;font bit is set.
  1048.  
  1049.                     ;If you set the extended select bit and the user extended selects, the list of filenames will start from here.
  1050.     APTR    frq_ExtendedSelect    ; Linked list of ESStructures if more than one filename is chosen.
  1051.                     ;All of the following variables you shouldn't need to touch.  They contain fields that the file
  1052.                     ;requester sets and likes to preserve over calls, just to make life easier for the user.
  1053.     STRUCT    frq_Hide,WILDLENGTH+2    ; Wildcards for files to hide.
  1054.     STRUCT    frq_Show,WILDLENGTH+2    ; Wildcards for files to show.
  1055.     WORD    frq_FileBufferPos    ; Cursor's  position  and first
  1056.     WORD    frq_FileDispPos        ; displayed character number in
  1057.     WORD    frq_DirBufferPos    ; the three string gadgets.  No
  1058.     WORD    frq_DirDispPos        ; need  to initialized these if
  1059.     WORD    frq_HideBufferPos    ; you don't want to.
  1060.     WORD    frq_HideDispPos
  1061.     WORD    frq_ShowBufferPos
  1062.     WORD    frq_ShowDispPos
  1063.  
  1064. ; The  following  fields are PRIVATE!  Don't go messing with them or
  1065. ; wierd  things may/will happen.  If this isn't enough of a warning, go read
  1066. ; the one in intuition.h, that should scare you off.
  1067.  
  1068.     APTR    frq_Memory            ; Memory allocated for dir entries.
  1069.     APTR    frq_Memory2            ; Used for currently hidden files.
  1070.     APTR    frq_Lock            ; Contains lock on directories being read across calls.
  1071.     STRUCT    frq_PrivateDirBuffer,DSIZE+2    ; Used for keeping a record of which
  1072.                         ; directory we have file names for.
  1073.     APTR    frq_FileInfoBlock
  1074.     WORD    frq_NumEntries
  1075.     WORD    frq_NumHiddenEntries
  1076.     WORD    frq_filestartnumber
  1077.     WORD    frq_devicestartnumber
  1078.     LABEL    frq_SIZEOF
  1079.  
  1080. Enjoy!
  1081.  
  1082. Steve.
  1083.  
  1084.  
  1085.  
  1086.             PCF Library - Picture Crunch Format
  1087.             ===================================
  1088.  
  1089.                    -Brought to you by FUNdamental-
  1090.  
  1091.  PCF COMMANDS 
  1092.  
  1093. About This Archive
  1094. ------------------
  1095.  
  1096.     This archive contains:
  1097.  
  1098.         o A new library of commands for Blitz Basic 2
  1099.         o A compiled blitz program to generate PCF files
  1100.           from IFF files
  1101.         o A Blitz Basic and ASCII version of the same demo
  1102.                   program, to show use of the commands
  1103.             o A pre-converted image
  1104.         o This file 8)
  1105.  
  1106. All coding was written by Nigel Hughes, with a thank you to Steve from 
  1107. Reflective Images for his help with AllocDosObject and addressing 
  1108. objects in libraries. Not to mention the excellent RIB libraries.
  1109.  
  1110. About PCF Format
  1111. ----------------
  1112.  
  1113. On the Blitz mailing list, there was a call for a method of protecting
  1114. graphics from the "general public" I responded by saying, 
  1115.  
  1116.     "Use my library"
  1117.  
  1118. And then disappeared to prepare for my finals! Well the finals are over
  1119. and so here is version one of the PCF Library, version 2 will be out 
  1120. soon, more details later.
  1121.  
  1122. PCF is more compact graphics file format, that cannot be read by any
  1123. general release paint package. There are commands within the library 
  1124. to cache these pictures and decompress to a bitmap only when you need 
  1125. them. Later versions will enable a coder to add his own personal tag
  1126. so only he/she can decrypt the file. 
  1127.  
  1128. Making a PCF Picture
  1129. --------------------
  1130.  
  1131. In order to turn a IFF ILBM picture into a PCF file one need only use 
  1132. the picture_crunch program supplied in the archieve. Click on the "Load 
  1133. N Crunch" button to load an IFF and convert it to a PCF file. You will
  1134. be asked if you wish to generate a V 1.0 file or the latest format. 
  1135. Please only select the "Latest Format" option as V1.0 is reserved for 
  1136. my use only and is protected and cannot be decrypted by any one else!
  1137.  
  1138. One can only use the Display gadgets once a IFF picture has been 
  1139. crunched, this is a bug that will be fixed in later versions. Sorry.
  1140.  
  1141. The Library
  1142. -----------
  1143.  
  1144. The library can be installed either by copying "PCF_Lib.obj" to your 
  1145. BlitzLibs:Userlibs directory and then selecting "RELOAD ALL LIBS" in the 
  1146. COMPILER menu in BB2, or by using the MakeDefLibs program after copying 
  1147. "PCF_LIb.obj" to your BlitzLibs:Userlibs directory.
  1148.  
  1149.  
  1150.  
  1151.                 PCF Commands:
  1152.  
  1153.                  CACHEPCF     
  1154.                  FREEPCFCACHE 
  1155.                  LOADPCF      
  1156.                  UNPACKPCF    
  1157.                  PCFDEPTH     
  1158.                  PCFHEIGHT    
  1159.                  PCFINFO      
  1160.                  PCFVERSION   
  1161.                  PCFWIDTH     
  1162.  
  1163.                  OTHER INFO   
  1164.  
  1165.  
  1166.  
  1167. Function : CachePCF
  1168. --------------------------------------------------------------------------
  1169. Modes:  Amiga
  1170. Syntax: cache_ptr.l=CachePCF (Filename$,Memory Type,Cache Length)
  1171.  
  1172. The function loads a PCF file into memory, returning the pointer to
  1173. the cache. The Cache Length variable will contain the length of the 
  1174. cache and is needed in order to use the FreePCFCache command. This 
  1175. command does not cause the PCF image to be displayed.
  1176.  
  1177. If anything goes wrong during the loading of the file, no memory
  1178. will be allocated and 0 will be returned.
  1179.  
  1180. See Also:  FREEPCFCACHE , LOADPCF , UNPACKPCF 
  1181.  
  1182.  
  1183. Statement: FreePCFCache
  1184. --------------------------------------------------------------------------
  1185. Modes:  Amiga/Blitz
  1186. Syntax: FreePCFCache cache_ptr,cache_length
  1187.  
  1188. Frees the memory used by the PCF cache.
  1189.  
  1190. See Also:  CACHEPCF 
  1191.  
  1192.  
  1193. Statement: UnpackPCF
  1194. --------------------------------------------------------------------------
  1195. Modes:    Amiga/Blitz
  1196. Syntax: UnpackPCF Bitmap#,Palette#,cache_ptr
  1197.  
  1198. Decompresses a PCF cache to a bitmap and palette. Both objects must 
  1199. already exist. The PCF library currently makes no attempt to check the 
  1200. bitmap or the palette are deep enough. If the bitmap is too large then 
  1201. the image WILL be corrupt. The statement checks the version of PCF Cache
  1202. to ensure that it can decompress it!
  1203.  
  1204. See Also:  CACHEPCF ,  LOADPCF 
  1205.  
  1206.  
  1207. Statement: LoadPCF
  1208. --------------------------------------------------------------------------
  1209. Modes:     Amiga
  1210. Syntax: LoadPCF Bitmap#,Palette#,cache_ptr
  1211.  
  1212. Loads and decompresses a PCF image straight into the bitmap and palette. 
  1213. The image is NOT cached afterwards. The same restriction apply to this 
  1214. command as to UnpackPCF
  1215.  
  1216. See Also:  CACHEPCF ,  UNPACKPCF 
  1217.  
  1218.  
  1219. Statement: PCFInfo
  1220. --------------------------------------------------------------------------
  1221. Modes: Amiga/Blitz
  1222. Syntax: PCFInfo cache_ptr
  1223.  
  1224. Enables the use of PCFWidth, PCFHeight, PCFDepth, PCFVersion. These 
  1225. commands will all return the relevant details about the cache pointed to
  1226. by cache_ptr. This allows a programmer to ensure that the destination 
  1227. bitmap and palette are of the correct dimensions.
  1228.  
  1229. See Also:  PCFWIDTH ,  PCFHEIGHT ,  PCFDEPTH ,  PCFVERSION 
  1230.  
  1231.  
  1232. Function: PCFVersion
  1233. --------------------------------------------------------------------------
  1234. Modes: Amiga/Blitz
  1235. Sytax: v.l=PCFVersion
  1236.  
  1237. Returns the version of the last cache interogated by PCFInfo.
  1238.  
  1239.  
  1240. Function: PCFWidth
  1241. --------------------------------------------------------------------------
  1242. Modes: Amiga/Blitz
  1243. Sytax: v.l=PCFWidth
  1244.  
  1245. Returns the width of the last cache interogated by PCFInfo.
  1246.  
  1247.  
  1248. Function: PCFHeight
  1249. --------------------------------------------------------------------------
  1250. Modes: Amiga/Blitz
  1251. Sytax: v.l=PCFHeight
  1252.  
  1253. Returns the height of the last cache interogated by PCFInfo.
  1254.  
  1255.  
  1256. Function: PCFDepth
  1257. --------------------------------------------------------------------------
  1258. Modes: Amiga/Blitz
  1259. Sytax: v.l=PCFDepth
  1260.  
  1261. Returns the number of bitplanes of the last cache interogated by 
  1262. PCFInfo.
  1263.  
  1264.  
  1265. Performence
  1266. -----------
  1267.  
  1268. The UnpackPCF command can decompress a 320x256 by 256 colour image
  1269. in under 10/50 of a second. For an image of 5 bitplanes or lower,
  1270. the command can often decompress in under a frame.
  1271.  
  1272. The PCF file format itself is usually about 1k smaller than the
  1273. related IFF file. This ratio will be much improved in the next
  1274. version.
  1275.  
  1276. The Futre
  1277. ---------
  1278.  
  1279. I have a HUGE list of things to do, I just really wanted to get this
  1280. out to the general public so people can tell me what they think (wince).
  1281. But futre enhancements will include...
  1282.  
  1283.     o A PackIFF type command
  1284.     o Improved Compression rate
  1285.     o Unique key for decompression
  1286.     o Multiple file types, including Shapes
  1287.     o Multiple files in one PCF file.
  1288.  
  1289. Any bugs etc please contact FUNdamental at
  1290.  
  1291.     Nigel Hughes
  1292.     2 Slimmons Drive
  1293.     St. Albans
  1294.     Herts
  1295.     AL4 9AS
  1296.  
  1297. Until the 23rd Of June at nlh1@k.ac.aber, and after
  1298. that via Mike Richards at mhr@k.ac.aber. 
  1299.  
  1300. Right, it is 1:05 AM and I am going to bed...
  1301.  
  1302. Nigel Hughes.
  1303.  
  1304.  BACK TO MAIN 
  1305.  
  1306.  
  1307.  
  1308.  
  1309.                 PACK Library v0.1
  1310.                 =================
  1311.  
  1312.         By Stephen McNamara with a little help from Steve Matty
  1313.         (c)1994 Reflective Images
  1314.  
  1315.  PACK COMMANDS 
  1316.  
  1317. This library contains commands for the unpacking of ILBM's (IFF 
  1318. pictures) and the grabbing of their palettes (CMAP chunks).  Nearly all 
  1319. the commands in this library can be used as either STATEMENTS or 
  1320. FUNCTIONS.  
  1321.  
  1322. Usage is identical in both cases but if used as a function then the 
  1323. command will return:
  1324.  
  1325.         FALSE for failure
  1326.         TRUE for success
  1327.  
  1328. Please feel free to critisise (or praise!) this library, send me 
  1329. anything you want to say about it at:
  1330.  
  1331.             Stephen McNamara,
  1332.               17 Mayles Road,
  1333.                     Southsea,
  1334.                   Portsmouth,
  1335.                    Hampshire,
  1336.                      England.
  1337.                      PO4 8NP.
  1338.     Telephone: (England) 0705 781507.
  1339.  
  1340. Or send us anything you've written........
  1341.  
  1342.  
  1343.          These are all the PACK library commands:
  1344.  
  1345.                  DEICE        
  1346.                  ILBMGRAB     
  1347.                  ILBMPALETTE  
  1348.                  LOADIFF      
  1349.                  =LOADIFF     
  1350.                  UNPACKIFF    
  1351.                  =CHUNKHEADER 
  1352.                  =DEICE       
  1353.                  =ILBMPALETTE 
  1354.                  =UNPACKIFF   
  1355.  
  1356.  
  1357.  
  1358. Statement/Function: UnpackIFF
  1359. --------------------------------------------------------------------------
  1360. Modes : Amiga/Blitz
  1361. Syntax: UnpackIFF address.l,bitmap#[,lines]
  1362.     suc=UnpackIFF (address.l,bitmap#[,lines])
  1363.  
  1364. This command is used to unpack an IFF picture file from memory onto a
  1365. bitmap.  Address.l should point to the START of the iff file header in
  1366. memory (either CHIP or FAST mem can be used), bitmap should be the 
  1367. number of a previously initialised bitmap.  The optional lines parameter
  1368. allows you to specify the number of lines to unpack from the IFF file.
  1369.  
  1370. This command checks the size of the bitmap against the size of the IFF
  1371. before it unpacks the IFF onto it.  Checks are made for width, height 
  1372. and depth of the bitmap and the IFF and the following is done:
  1373.  
  1374. (size=WIDTH, HEIGHT and DEPTH)
  1375.  
  1376.         BITMAP 'size' < IFF 'size' : unpack aborted
  1377.         BITMAP 'size' = IFF 'size' : pic is unpacked
  1378.         BITMAP 'size' > IFF 'size' : pic is unpacked
  1379.  
  1380.   Extra aborts can be caused by:
  1381.         - not using a previously installed bitmap
  1382.         - given the optional lines parameter as 0 or less
  1383.         - not giving ADDRESS.l as a pointer to a valid IFF ILBM
  1384.           header
  1385.  
  1386. When using the optional parameter, you should note that if you try to
  1387. unpack more lines than the IFF has, the unpack routine will 
  1388. automatically stop at the last line of the IFF.  It will not reject the 
  1389. UnpackIFF command.
  1390.  
  1391. NOTE: you should save your IFF pictures with the STENCIL OFF because at
  1392. the moment this routine does not check to see if STENCIL data is present
  1393. in the IFF file.
  1394.  
  1395.  
  1396. Statement/Function: ILBMPalette
  1397. --------------------------------------------------------------------------
  1398. Modes : Amiga/Blitz
  1399. Syntax: ILBMPalette address.l,palette#
  1400.     suc=ILBMPalette (address.l,palette#)
  1401.  
  1402. This command is used to grab the palette from a IFF picture file held in
  1403. memory (CHIP or FAST mem).  Address.l should be given as the address of
  1404. either an IFF file in memory or a CMAP chunk in memory.  When you use 
  1405. the SAVE PALETTE command from inside an art program (e.g. DPaint) or 
  1406. from inside Blitz2, the program saves out a CMAP chunk which gives 
  1407. details about the palette.  The CMAP chunk is also saved with IFF 
  1408. picture files to give the palette of the picture.
  1409.  
  1410. This command will look at the address you gave and try and find a CMAP
  1411. chunk from the address given to address+5120.  If it finds a chunk it 
  1412. will grab the palette into the given palette object.  If the palette 
  1413. object already contains palette information then this information is 
  1414. deleted. This routine looks in the CMAP chunk and reserves the palette 
  1415. object to have the same number of colour entries.
  1416.  
  1417. This command will fail if it doesn't find a CMAP chunk.
  1418.  
  1419.  
  1420. Statment: ILBMGrab
  1421. -------------------------------------------------------------------------
  1422. Modes : Amiga/Blitz
  1423. Syntax: ILBMGrab address.l,bitmap#,palette#
  1424.  
  1425. This command lets you grab both the palette and the graphics from an IFF
  1426. picture file with just one command.  It returns to success parameter to
  1427. say whether or not it succeeded in grabbing the data, so if you need to 
  1428. know if the grabbing was successful you'll have to use the separate 
  1429. commands for grabbing palettes and graphics.
  1430.  
  1431.   NOTE: this command essentially just calls both  UNPACKIFF  and 
  1432.    ILBMPALETTE 
  1433.   so everything said about these commands is relevent for ILBMGrab.
  1434.  
  1435.  
  1436. Statment/Function: LoadIFF
  1437. -------------------------------------------------------------------------
  1438. Modes : Amiga
  1439. Syntax: LoadIFF filename$,bitmap#[,palette#]
  1440.     suc=LoadIFF (filename$,bitmap#[,palette#])
  1441.  
  1442. This command is a direct replacement for Blitz2's LoadBitmap. It is a
  1443. lot faster than Blitz's command since it loads the file into memory and
  1444. then unpacks it from there.  Thus you need to ensure that you have 
  1445. enough free memory to load the IFF into before trying to use this 
  1446. command.
  1447.  
  1448. This command is also more stable than Blitz's since it checks for the
  1449. existence of the file before trying to load it in.
  1450.  
  1451. The optional parameter allows you to load in the palette of the IFF
  1452. picture.  Refer to UnpackIFF and ILBMPalette for more information about
  1453. unpacking the graphics and grabbing the palettes.
  1454.  
  1455. IMPORTANT NOTE: to use this command you must have 
  1456. our  FUNC  library installed in your copy of Blitz2.  
  1457. Use of this command without this library will probably lead to a bad crash 
  1458. of your Amiga!
  1459.  
  1460.  
  1461. Statement/Function: DeIce
  1462. -------------------------------------------------------------------------
  1463. Modes : Amiga
  1464. Syntax: DeIce source_address,dest_address
  1465.     suc=DeIce (source_address,dest_address)
  1466.  
  1467. This is a command from my (Stephen McNamara) past.
  1468. It is used to unpack data files packed by my favourite Atari ST packer -
  1469. PACK ICE v2.40.  I've put it into Blitz because still have loads of 
  1470. files that I've packed with it.  To use it, source_address should 
  1471. (obviously) contain the address of the data, dest_address should be 
  1472. where to unpack the data to.  In the function form, this command returns
  1473. either 0 for unpack failed or -1 for success.
  1474.  
  1475. Note: The size of the data unpacked is the long 
  1476. word at source_address+8 (I think, or is it 4?) if anybody is 
  1477. interested......
  1478.  
  1479.  
  1480. Function: ChunkHeader
  1481. -------------------------------------------------------------------------
  1482. Modes : Amiga
  1483. Syntax: val.l=ChunkHeader (A$)
  1484.  
  1485. This command was put in by me (Stephen McNamara) before I realised Blitz
  1486. already had a command that does exactly the same.  I've left it in just
  1487. because I want to.  It is useful when looking through IFF files for 
  1488. chunks (e.g. ILBM, CMAP, etc.) as it gives you a longword value to look 
  1489. for in memory to find the chunk.  The string should be a four character 
  1490. string (e.g. CMAP), you'll be returned the longword value of the string.
  1491. This command does the job of the following bit of Blitz2 code:
  1492.  
  1493.         a$="CMAP"
  1494.         val.l=Peek.l(&a$)
  1495.  
  1496.  
  1497.  
  1498.                 GFX Library v0.1
  1499.                 ================
  1500.  
  1501.             By Stephen McNamara and Steve Matty
  1502.                 (c)1994 Reflective Images
  1503.  
  1504.  GFX COMMANDS 
  1505.  
  1506. This library contains commands for the control of palette objects inside
  1507. Blitz2.  These are just simple commands that allow either interrogation 
  1508. of the palette objects are modifications to the colour values contained
  1509. in them.  After changing the palette with these commands, you'll have to
  1510. do either a USE PALETTE or DISPLAYPALETTE (whichever is applicable to 
  1511. what you're doing) to make the changes come into effect on your screen.
  1512.  
  1513. Please feel free to critisise (or praise!) this library, send me 
  1514. anything you want to say about it at:
  1515.  
  1516.     SIS3149@ISVAX.PORT.AC.UK
  1517.         or
  1518.     SIS3147@ISVAX.PORT.AC.UK
  1519.  
  1520. Or send us anything you've written........
  1521.  
  1522.  
  1523.          These are all the GFX library commands:
  1524.  
  1525.                   AGAFILLPALETTE 
  1526.                   FILLPALETTE    
  1527.                   PALADJUST      
  1528.                   PALETTEINFO    
  1529.                   =PALRED        
  1530.                   =PALGREEN      
  1531.                   =PALBLUE       
  1532.                   =AGAPALRED     
  1533.                   =AGAPALGREEN   
  1534.                   =AGAPALBLUE    
  1535.  
  1536.  
  1537.  
  1538. Statement: PaletteInfo
  1539. --------------------------------------------------------------------------
  1540. Modes : Amiga/Blitz
  1541. Syntax: PaletteInfo Palette#
  1542.  
  1543. This command is used to specify the palette object that all palette
  1544. interrogations should look at.  The majority of the commands use this
  1545. palette object as the source for their data, e.g. PalRed(1) will look at
  1546. the red value of colour 1 of the palette last used in a PaletteInfo
  1547. command.
  1548.  
  1549.  
  1550. --------------------------------------------------------------------------
  1551. Modes :  Amiga/Blitz Syntax:  r.w=PalRed (Colour#)
  1552.  
  1553. This command is used to get the red value of colour number Colour#. You
  1554. should use the PaletteInfo command to specify what palette this command
  1555. takes its information from.
  1556.  
  1557. The value returned will be from 0 to 15
  1558.  
  1559.  
  1560. Function: PalGreen
  1561. -------------------------------------------------------------------------
  1562. Modes : Amiga/Blitz
  1563. Syntax: r.w=PalGreen (Colour#)
  1564.  
  1565. This command is used to get the green value of colour number Colour#. 
  1566. You should use the PaletteInfo command to specify what palette this 
  1567. command takes its information from.
  1568.  
  1569. The value returned will be from 0 to 15
  1570.  
  1571.  
  1572. Function: PalBlue
  1573. -------------------------------------------------------------------------
  1574. Modes : Amiga/Blitz
  1575. Syntax: b.w=PalBlue (Colour#)
  1576.  
  1577. This command is used to get the blue value of colour number Colour#. You
  1578. should use the PaletteInfo command to specify what palette this command
  1579. takes its information from.
  1580.  
  1581. The value returned will be from 0 to 15
  1582.  
  1583.  
  1584. Function: AGAPalRed
  1585. -------------------------------------------------------------------------
  1586. Modes : Amiga/Blitz
  1587. Syntax: r.w=AGAPalRed (Colour#)
  1588.  
  1589. This command is used to get the red value of colour number Colour#. You
  1590. should use the PaletteInfo command to specify what palette this command
  1591. takes its information from.
  1592.  
  1593. The value returned will be from 0 to 255, this number of shades, though,
  1594. can only be displayed on an AGA machine.
  1595.  
  1596.  
  1597. Function: AGAPalGreen
  1598. -------------------------------------------------------------------------
  1599. Modes : Amiga/Blitz
  1600. Syntax: g.w=AGAPalGreen (Colour#)
  1601.  
  1602. This command is used to get the green value of colour number Colour#.
  1603. You should use the PaletteInfo command to specify what palette this 
  1604. command takes its information from.
  1605.  
  1606. The value returned will be from 0 to 255, this number of shades, though,
  1607. can only be displayed on an AGA machine.
  1608.  
  1609.  
  1610. Function: AGAPalBlue
  1611. -------------------------------------------------------------------------
  1612. Modes : Amiga/Blitz
  1613. Syntax: b.w=AGAPalBlue (Colour#)
  1614.  
  1615. This command is used to get the blue value of colour number Colour#. You
  1616. should use the PaletteInfo command to specify what palette this command
  1617. takes its information from.
  1618.  
  1619. The value returned will be from 0 to 255, this number of shades, though,
  1620. can only be displayed on an AGA machine.
  1621.  
  1622.  
  1623. Statement: PalAdjust
  1624. -------------------------------------------------------------------------
  1625. Modes : Amiga/Blitz
  1626. Syntax: PalAdjust dest_palette#,ration.q[,start_col,end_col]
  1627.  
  1628. This command is used to multiple all the colours, or a range of colours,
  1629. in a palette object, by a ratio.  The dest_palette# arguement is used to
  1630. give a destination for the adjusted colour information.  This 
  1631. destination should be a pre-reserved palette and should be AT LEAST as 
  1632. big and the source palette.  The source palette is taken as being the 
  1633. palette last used in the PaletteInfo command.
  1634.  
  1635. The ratio should be given as either a quick value or a float and should
  1636. be below one for a fade or above to lighten a palette.  If you give a 
  1637. ratio of 1 then a palette copy will occur.
  1638.  
  1639. The optional start and end parameters let you specify the range of
  1640. colours to adjust.  Only this range of colours, though, will be adjusted
  1641. and stored in the destination palette.
  1642.  
  1643.  
  1644. Statement: FillPalette
  1645. -------------------------------------------------------------------------
  1646. Modes : Amiga/Blitz
  1647. Syntax: FillPalette palette#,r,g,b[start_col,end_col]
  1648.  
  1649. This command lets you fill a given palette object with specific r,g,b
  1650. values.  The values given should be between 0 to and 15.  Optionally, 
  1651. you can give start and end colour numbers to set a range for the fill.  
  1652. You should be careful, though, because when you specify a range, no 
  1653. checking is done (at the moment) to make sure that you don't exceed 
  1654. the colour limit of the palette.
  1655.  
  1656. You should note that this command does not work on the palette last
  1657. PaletteInfo'ed.
  1658.  
  1659.  
  1660. Statement: AGAFillPalette
  1661. -------------------------------------------------------------------------
  1662. Modes : Amiga/Blitz
  1663. Syntax: AGAFillPalette palette#,r,g,b[start_col,end_col]
  1664.  
  1665. This command is identical to  FILLPALETTE  except that it lets 
  1666. you specify AGA shade values for the r,g,b parameters.
  1667.  
  1668. See  FILLPALETTE  for more information.
  1669.  
  1670.  
  1671.  
  1672.                 FNS Library v0.992
  1673.                 ==================
  1674.  
  1675.  
  1676.                 By Stephen McNamara
  1677.                  (c)1994 Reflective Images
  1678.  
  1679.  FNS COMMANDS 
  1680.  
  1681. This Blitz2 library prints proportional fonts in either Amiga or Blitz
  1682. mode.  It uses my own (rather primitive) font file format, details of 
  1683. which can be found at the end of this text file.  Fonts can be upto 64 
  1684. pixels wide and any height (although the font editor is limited to 64 
  1685. pixels at the present moment).  Fonts can be output in upto 256 colours
  1686. (AGA!) and in the following ways: bold, centred, underlined, right-
  1687. aligned or just standard left-aligned.
  1688.  
  1689. Note: a default font (PERSONAL.8) is built into this library and can be
  1690. used by simply using font number 0.  You do not have to install this 
  1691. font, it is automatically available for your use.  A second point is to 
  1692. make is that the library is set up with a clipping rectangle of 0,0 to 
  1693. 0,0. Thus you have to use either FNSClip, FNSClipOutput or FNSOutput 
  1694. (with the optional clip parameter) to set the clipping rectangle before 
  1695. you try to print anything.
  1696.  
  1697. Please feel free to critisise (or praise!) this library, send me 
  1698. anything you want to say about it at:
  1699.  
  1700.             SIS3149@ISVAX.SIS.PORT.AC.UK
  1701.  
  1702. Or send me anything you've written........
  1703.  
  1704.  
  1705.  
  1706.             These are all the FNS library commands:
  1707.  
  1708.              INSTALLFNS       =FNSHEIGHT    
  1709.              REMOVEFNS        =FNSLENGTH    
  1710.              FNSCLIP          =FNSLOAD      
  1711.              FNSCLIPOUTPUT    =FNSSLOT      
  1712.              FNSSETTAB        =FNSUNDERLINE 
  1713.              FNSINK           =FNSVERSION   
  1714.              FNSORIGIN        =FNSWIDTH     
  1715.              FNSOUTPUT        FNSPREFS      
  1716.              FNSPRINT         FNSUNLOAD     
  1717.  
  1718.                  FNS FONT FORMAT 
  1719.  
  1720.  
  1721. Note: All return values will be words except when using InstallFNS and
  1722.       FNSVersion.
  1723.  
  1724.  
  1725.  
  1726. FNS Font file format:
  1727. =====================
  1728.  
  1729. Header: 256 bytes.
  1730.     0-3   : 'FNS.' - file identifier - looked for by InstallFNS
  1731.     4-5   : height of font (#word)
  1732.     6-7   : width of font in multiples of 16 (#word)
  1733.     8-9   : underline position (offset from top of font, #word)
  1734.     10-11 : size of data for each font character
  1735.         [ (WIDTH/8) * height ]
  1736.     32-255: byte giving widths of each character in the font.
  1737.         These bytes doesn't really hold the width, rather
  1738.         they hold the value to add to the X position of the
  1739.         character to get to the position to print the next
  1740.         character at (!).
  1741.  
  1742.     256-EOF:character data starting at ASCII 32 (space)
  1743.  
  1744.  
  1745.  
  1746. Statement: FNSSetTab
  1747. -------------------------------------------------------------------------
  1748. Modes : Amiga/Blitz
  1749. Syntax: FNSSetTab tab_width
  1750.  
  1751. Description:
  1752. Use this command to set the tab spacing used when printing. The value
  1753. given should be the spacing IN pixels.
  1754.  
  1755.  
  1756. Function: FNSLoad
  1757. --------------------------------------------------------------------------
  1758. Modes : Amiga/Blitz
  1759. Syntax: suc=FNSLoad (filename$,font#)
  1760.  
  1761. Description:
  1762. This command is used to load a font from disk and automatically install
  1763. it for use by the FNS commands.  Filename$ should be the full name of 
  1764. the file to load (path$+file$) and font# should be 0<= and >=15.  This 
  1765. command returns a value of -1 for failure or the font number the font 
  1766. was installed as (see InstallFNS).  A failure could either be a load 
  1767. error or an installation error.
  1768.  
  1769. You should make sure that the file you load IS an FNS font file.
  1770.  
  1771. IMPORTANT NOTE: to use this command, you must have 
  1772. our  FUNC library installed on your copy of Blitz2.  
  1773. Running it without this library could, and probably will, cause a major 
  1774. crash of your computer. 
  1775.  
  1776. Also note that if you do an ERASEALL (this is a  FUNC library command for
  1777. erasing banks), you will DELETE your font from memory!
  1778.  
  1779.  
  1780. Statement: FNSUnLoad
  1781. --------------------------------------------------------------------------
  1782. Modes : Amiga/Blitz
  1783. Syntax: FNSUnLoad font#
  1784.  
  1785. This command is used to remove a font installed with the FNSLoad 
  1786. command. When this command runs it automatically removes the font 
  1787. entry in the FNS commands and deletes the memory that the font file is
  1788. held in. There is no need to do this at the end of a program as the 
  1789.  FUNC library automatically frees up all allocated 
  1790. memory.
  1791.  
  1792.  
  1793.  
  1794. Function: FNSSlot
  1795. -------------------------------------------------------------------------
  1796. Modes : Amiga/Blitz
  1797. Syntax: address.l=FNSSlot
  1798.  
  1799. Steve: this command was not in the doc file.
  1800.  
  1801.  
  1802.  
  1803.  
  1804. Function: InstallFNS
  1805. -------------------------------------------------------------------------
  1806. Modes : Amiga/Blitz
  1807. Syntax: font_num.b=InstallFNS(font_num.b,address.l)
  1808.  
  1809. This is used to install a font so that it is available for use by
  1810. the output routines.  Font_num should be a number >=0 and <=15,
  1811. address should be the address in memory of the FNS font file.
  1812. This function will check that the address given does contain a FNS
  1813. font (it will look for the header 'FNS.'), if it cannot find the font
  1814. or something else goes wrong it will return a 0 to you, otherwise it
  1815. will return the number the font was installed as.
  1816.  
  1817. Note: The font number you give is automatically ANDED with $F when you
  1818.       call this function, thus if you supply a number greater that 15
  1819.       you could actually overwrite a previously installed font.
  1820.  
  1821. See:  REMOVEFNS 
  1822.  
  1823.  
  1824.  
  1825. Statement: RemoveFNS
  1826. -------------------------------------------------------------------------
  1827. Modes : Amiga/Blitz
  1828. Syntax: RemoveFNS font#
  1829.  
  1830. This command simply removes an installed font from the list of font
  1831. held internally by the FNS routines.  There is no real need to remove
  1832. fonts as installing fonts takes up no memory, except of course the 
  1833. actual font data.  You do not need to remove FNS fonts before ending a
  1834. program.
  1835.  
  1836. See:  INSTALLFNS 
  1837.  
  1838.  
  1839.  
  1840. Statement: FNSPrint
  1841. -------------------------------------------------------------------------
  1842. Modes : Amiga/Blitz
  1843. Syntax: FNSPrint font_num.b,x.w,y.w,a$/string_address
  1844.         [,preferences,colour]
  1845.  
  1846. This command prints the string a$ in an FNS font at the position X,Y.
  1847. Font_num is the number of a previously installed FNS font, the output
  1848. of this command is sent to the current FNS bitmap (see FNSOutput). You
  1849. can setting a drawing rectangle on the currently used bitmap to limit
  1850. the output of the font - see FNSClip for more info.
  1851.  
  1852. Instead of a string, though, you can give the address of a null
  1853. terminated string in memory.  Also, you can change the colour that text 
  1854. is being output in in the current string by putting the character ASCII 1
  1855. followed by a byte value from 0-255 specifying the colour to change to.
  1856.  
  1857. The optional parameters are for controlling how the text is output.
  1858. They automatically overide the default setting but are not permanent,
  1859. i.e. the default output style and colour are restored after the line
  1860. has been output.  Use FNSInk and FNSPrefs to set the default font
  1861. output mode.
  1862.  
  1863.   See:  FNSOUPUT  , FNSINK    , FNSPREFS  , FNSORIGIN , FNSCLIP   
  1864.  
  1865.  
  1866.  
  1867. Statement: FNSOutput
  1868. --------------------------------------------------------------------------
  1869. Modes : Amiga/Blitz
  1870. Syntax: FNSOutput bitmap#[,clip_update]
  1871.  
  1872. This command selects a bitmap for use by the FNS routines, the bitmap
  1873. must be a previously reserved Blitz 2 bitmap object.  After this
  1874. command all FNS font printing will occur on the selected bitmap.  The
  1875. optional parameter allows you to update the clipping rectangle for
  1876. output at the same time as setting the output bitmap.  Setting
  1877. clip_update to a non-zero value will cause the clipping area to
  1878. automatically be set to the dimensions of the selected bitmap.
  1879.  
  1880. NOTE:
  1881. -----
  1882. This command MUST be used before you attempt to use FNSPrint.
  1883. The maximum depth of the bitmap for printing is 8 bitplanes since this
  1884. is all Blitz 2 currently supports.
  1885.  
  1886. See:  FNSCLIP , FNSCLIPOUTPUT 
  1887.  
  1888.  
  1889.  
  1890. Statement: FNSInk
  1891. -------------------------------------------------------------------------
  1892. Modes : Amiga/Blitz
  1893. Syntax: FNSInk colour#
  1894.  
  1895. This sets the output colour for the FNS font drawing routines. The 
  1896. number range is dependant on the depth of the destination bitmap, the
  1897. max posible range, though, is limited to 0 to 255 colours.  The FNS
  1898. output routines will attempt to draw in all the bitplanes of the
  1899. selected bitmap, any extra bits in the ink colour will be ignored.
  1900.  
  1901. See:  FNSPREFS 
  1902.  
  1903.  
  1904.  
  1905. Statement: FNSPrefs
  1906. -------------------------------------------------------------------------
  1907. Modes : Amiga/Blitz
  1908. Syntax: FNSInk preferences[,colour#]
  1909.  
  1910. This sets the output prefs for the FNS font drawing routines but at
  1911. the same time also sets the colour for the FNS routines (optional).
  1912. At the moment the following options are available, the bits of the
  1913. preferences byte are used to select the different options:
  1914.  
  1915.                             bit 0: Centred text
  1916.                             bit 1: Bold text
  1917.                 bit 2: Underline
  1918.                 bit 3: Right aligned
  1919.  
  1920. See:  FNSINK , FNSPRINT , FNSLENGTH 
  1921.  
  1922.  
  1923.  
  1924. Function: FNSHeight
  1925. -------------------------------------------------------------------------
  1926. Modes : Amiga/Blitz
  1927. Syntax: height.w=FNSHeight(font_num)
  1928.  
  1929. This routine returns the height of a previously installed FNS font.
  1930. Font_num should be >=0 and <=15.
  1931.  
  1932. See:  FNSUNDERLINE , FNSWIDTH 
  1933.  
  1934.  
  1935.  
  1936. Function: FNSUnderline
  1937. -------------------------------------------------------------------------
  1938. Modes : Amiga/Blitz
  1939. Syntax: under_pos=FNSUnderline(font_num)
  1940.  
  1941. This routine returns the underline position of the selected FNS font.
  1942. Font_num should be >=0 and <=15.
  1943.  
  1944. See:  FNSHEIGHT , FNSWIDTH 
  1945.  
  1946.  
  1947.  
  1948. Function: FNSWidth
  1949. -------------------------------------------------------------------------
  1950. Modes : Amiga/Blitz
  1951. Syntax: width.w=FNSWidth(font_num)
  1952.  
  1953. This routine returns the width in multiples of 16 of the selected FNS
  1954. font.  Font_num should be >=0 and <=15.
  1955.  
  1956. See:  FNSHEIGHT , FNSUNDERLINE 
  1957.  
  1958.  
  1959.  
  1960. Statement: FNSClip
  1961. -------------------------------------------------------------------------
  1962. Modes : Amiga/Blitz
  1963. Syntax: FNSClip x1,y1,x2,y2
  1964.  
  1965. This command is used to limit the output of the FNSPrint command.  The
  1966. co-ordinates given should describe a rectangle that is to be used to
  1967. clip the output.  This rectangle can be thought of as a window on the
  1968. bitmap - no printing can occur outside of the window.
  1969. X1,Y1 are the top left corner of the clipping rectangle and X2,Y2 are 
  1970. the bottom right corner.  Please note that both X co-ordinates should be
  1971. multiples of 16 and that X2 should be the heightest multiple of 16 that
  1972. you do not wish output to occur at.  Thus if your bitmap is 320x256 then
  1973. you would use the following to set the clipping rectangle to the full
  1974. bitmap:
  1975.         FNSClip 0,0,320,256
  1976.  
  1977. See:  FNSCLIPOUTPUT , FNSOUTPUT 
  1978.  
  1979.  
  1980.  
  1981. Statement: FNSClipOutput
  1982. -------------------------------------------------------------------------
  1983. Modes : Amiga/Blitz
  1984. Syntax: FNSClipOutput
  1985.  
  1986. This command is used to quickly set the clipping rectangle for the FNS
  1987. commands to the full size of a bitmap.
  1988.  
  1989. See:  FNSCLIP , FNSOUTPUT 
  1990.  
  1991.  
  1992.  
  1993. Statement: FNSOrigin
  1994. -------------------------------------------------------------------------
  1995. Modes : Amiga/Blitz
  1996. Syntax: FNSOrigin [x,y]
  1997.  
  1998. This command is used to set an origin co-ordinate for printing output.
  1999. Whenever you use FNSPrint, the origin co-ordinates are added (as words)
  2000. to the co-ordinates you give for output.  I.e. setting the origin at
  2001. 100,0 and printing at co-ordinates 0,0 will cause the output to be at
  2002. 100,0.
  2003.  
  2004. Using this command without any parameters will cause the origin to
  2005. be reset to the position 0,0.
  2006. Note: This command does not affect the use of the FNSClip command.
  2007.  
  2008.  
  2009.  
  2010. Function: FNSLength
  2011. -------------------------------------------------------------------------
  2012. Modes : Amiga/Blitz
  2013. Syntax: a=FNSLength (font#,a$[,prefs])
  2014.  
  2015. This command is equivalent of the basic command a=len(a$) except that
  2016. it returns the x size, in pixels, of the string if it were to be printed
  2017. in the font font#.  The optional preferences parameter allows you to
  2018. adjust the output of the string, if you specify no preferences then this
  2019. function will use the previously selected preferences to calculate the
  2020. string length.  Using preferences allows you to account for things like
  2021. bold text output.
  2022.  
  2023. See:  FNSPREFS 
  2024.  
  2025.  
  2026.  
  2027. Function: FNSVersion
  2028. -------------------------------------------------------------------------
  2029. Modes : Amiga/Blitz
  2030. Syntax: a.q=FNSVersion
  2031.  
  2032. This command allows you to test the version number of the FNS library
  2033. that your program is being compiled with.  It returns a quick float 
  2034. value and so you should use a quick float variable for the answer.  This
  2035. doc file was written for version 0.991 of the library.
  2036.  
  2037.  
  2038. FNS Font file format:
  2039. =====================
  2040.  
  2041. Header: 256 bytes.
  2042.     0-3   : 'FNS.' - file identifier - looked for by InstallFNS
  2043.     4-5   : height of font (#word)
  2044.     6-7   : width of font in multiples of 16 (#word)
  2045.     8-9   : underline position (offset from top of font, #word)
  2046.     10-11 : size of data for each font character
  2047.         [ (WIDTH/8) * height ]
  2048.     32-255: byte giving widths of each character in the font.
  2049.         These bytes doesn't really hold the width, rather
  2050.         they hold the value to add to the X position of the
  2051.         character to get to the position to print the next
  2052.         character at (!).
  2053.  
  2054.     256-EOF:character data starting at ASCII 32 (space)
  2055.  
  2056.  
  2057.  
  2058.             Func/AMOS Library v1.0
  2059.             =================
  2060.  
  2061.             By Steven Matty
  2062.              ©1994 Reflective Images
  2063.  
  2064.  FUNC COMMANDS 
  2065.  
  2066. This library was written primarily to emulate the functions that were
  2067. present in AM*S but not in Blitz Basic 2. It began life as a load of 
  2068. Blitz Statements but was then converted to high speed 680x0. The library
  2069. will continually be expanded upon and free updates will be sent on 
  2070. request. If you decide to use any of the function please give me a 
  2071. little cred, not a lot, just something. Anyway, enough of this 
  2072. baloney....on with the command list. 
  2073.  
  2074.  
  2075.             These are all the FUNC library commands:
  2076.  
  2077.         
  2078.              CACHEOFF        =KEYCODE      
  2079.              COPYBYTE        =LENGTH       
  2080.              COPYWORD        =LISA         
  2081.              COPYLONG        =MAKEDIR      
  2082.              ERASE           =MAX          
  2083.              ERASEALL        =MEMFREE      
  2084.              FILLMEM         =MIN          
  2085.              NEXTBANK        =PLOAD        
  2086.              REBOOT          =RENAME       
  2087.              RESETTIMER      =RESERVE      
  2088.              =BLOAD          =CLUDGESHAPES 
  2089.              =BSAVE          =CLUDGESOUND  
  2090.              =FILESIZE       =START        
  2091.              =XOR            =TIMER        
  2092.  
  2093.  
  2094.  
  2095. ********************************* NOTE **************************************
  2096. * VALID BANKS RANGE FROM 0-49 INCLUSIVE. DO NOT USE A VALUE GREATER THAN 49 *
  2097. * OR IT WILL BE INTERPRETED AS AN ADDRESS RATHER THAN A BANKNUMBER          *
  2098. *****************************************************************************
  2099.  
  2100.  
  2101.  
  2102. Statement: ResetTimer
  2103. --------------------------------------------------------------------------
  2104. Mode   : Amiga/Blitz
  2105. Syntax : ResetTimer
  2106.  
  2107. This will recent the CIA timer to 0.
  2108.  
  2109.  
  2110. Statement/Function : CludgeShapes
  2111. --------------------------------------------------------------------------
  2112. Mode   : Amiga/Blitz
  2113. Syntax : [success]=CludgeShapes(shape#,numshapes,address)
  2114.  
  2115. This allows the creation of shapes through INCBIN statements. It
  2116. allocates chip memory for each shape and copies the data into this.
  2117. It does the same as LoadShapes except it grabs shapes from memory.
  2118.  
  2119.  
  2120. Statement/Function : CludgeSound
  2121. --------------------------------------------------------------------------
  2122. Mode   : Amiga/Blitz
  2123. Syntax : [success]=CludgeSound(sound#,address)
  2124.  
  2125. This does that same for CludgeShapes but works on only 1 sound at a time
  2126.  
  2127. NOTE: Looped sounds are not currently supported! The sound must be a valid
  2128. 8SVX sample.
  2129.  
  2130.  
  2131.  
  2132. Function: Reserve
  2133. --------------------------------------------------------------------------
  2134. Mode   : Amiga/Blitz
  2135. Syntax : success=Reserve(banknumber,length)
  2136.  
  2137.   This will attempt to reserve <length> bytes of memory. If succesfull,
  2138. it will return the address of the bank. If unsuccessfull, 0 is returned.
  2139. Banks are limited by the Compiler Options Menu.
  2140.  
  2141.  
  2142.  
  2143. Statement: Erase
  2144. --------------------------------------------------------------------------
  2145. Mode   : Amiga/Blitz
  2146. Syntax : Erase(banknumber)
  2147.  
  2148. The Erase command will erase the specified memory bank.
  2149.  
  2150.  
  2151.  
  2152. Statement: EraseAll
  2153. --------------------------------------------------------------------------
  2154. Mode   : Amiga/Blitz
  2155. Syntax : EraseAll
  2156.  
  2157. This command will erase ALL allocated memory banks.
  2158.  
  2159.  
  2160.  
  2161. Function: BLoad
  2162. -------------------------------------------------------------------------
  2163. Mode   : Amiga
  2164. Syntax : success=BLoad(filename$,bank/address[,length,offset])
  2165.  
  2166. If bank is specified, then the file is loaded into that bank. If address
  2167. is specified then it is loaded to the address. Valid banks are 0-49. 
  2168. If the bank does not exist, Blitz will reserve a bank for you.
  2169. If the bank does exist, Blitz will erase the bank from memory, and
  2170. allocate a new one.
  2171.  
  2172. The return result is -1 for success, or 0 for failure  (not enough RAM, 
  2173. file not exist). If offset is specified, then <length> bytes will be 
  2174. read from the specified offset position in the file.
  2175.  
  2176.  
  2177.  
  2178. Function: PLoad
  2179. -------------------------------------------------------------------------
  2180. Mode   : Amiga
  2181. Syntax : success=PLoad(filename$,bank/address)
  2182.  
  2183. This will attempt to load the executable file to the specified address.
  2184. -1 is success, 0 is failure.
  2185.  
  2186.  
  2187.  
  2188. Function: BSave
  2189. -------------------------------------------------------------------------
  2190. Mode   : Amiga
  2191. Syntax : success=BSave(filename$,bank/address,length)
  2192.  
  2193. This will save <length> bytes at bank/address to the file. Return result
  2194. is -1 for success, 0 for failure. If length > bank length then the 
  2195. length of the bank is saved instead. If 0 is specified, the entire bank 
  2196. is saved.
  2197.  
  2198.  
  2199.  
  2200. Function: Start
  2201. -------------------------------------------------------------------------
  2202. Mode   : Amiga/Blitz
  2203. Syntax : start_address.l=Start(banknumber.b)
  2204.  
  2205. This will return the start address of the specified bank. (0=no bank)
  2206.  
  2207.  
  2208.  
  2209. Function: Length
  2210. -------------------------------------------------------------------------
  2211. Mode   : Amiga/Blitz
  2212. Syntax : length_of_bank.l=Length(banknumber.b)
  2213.  
  2214. This will return the length of the specified bank in bytes. (0=No bank)
  2215.  
  2216.  
  2217.  
  2218. Function: MemFree
  2219. -------------------------------------------------------------------------
  2220. Mode   : Amiga/Blitz
  2221. Syntax : bytes.l=MemFree
  2222.  
  2223. This will return the total amount of Public Free RAM available to the
  2224. system.
  2225.  
  2226.  
  2227.  
  2228. Function: NextBank
  2229. -------------------------------------------------------------------------
  2230. Mode   : Amiga/Blitz
  2231. Syntax : bank.b=NextBank
  2232.  
  2233. This will return the number of the first available bank (-1 if none 
  2234. free).
  2235.  
  2236.  
  2237.  
  2238. Statement: FillMem
  2239. -------------------------------------------------------------------------
  2240. Mode   : Amiga/Blitz
  2241. Syntax : FillMem(address.l,length.l,value.b)
  2242.  
  2243. This will fill 'length' bytes starting from the specified address with 
  2244. 'value'.
  2245.  
  2246.  
  2247.  
  2248. Statement: CopyByte
  2249. -------------------------------------------------------------------------
  2250. Mode   : Amiga/Blitz
  2251. Syntax : CopyByte(source.l,dest.l,num.l)
  2252.  
  2253. This will copy <num> bytes from <source> to <dest> 
  2254.  
  2255.  
  2256.  
  2257. Statement: CopyWord
  2258. -------------------------------------------------------------------------
  2259. Mode   : Amiga/Blitz
  2260. Syntax : CopyByte(source.l,dest.l,num.l)
  2261.  
  2262. This will copy <num> words from <source> to <dest> 
  2263.  
  2264.  
  2265.  
  2266. Statement: CopyLong
  2267. -------------------------------------------------------------------------
  2268. Mode   : Amiga/Blitz
  2269. Syntax : CopyByte(source.l,dest.l,num.l)
  2270.  
  2271. This will copy <num> longwords from <source> to <dest> 
  2272.  
  2273.  
  2274.  
  2275. Function: MakeDir
  2276. -------------------------------------------------------------------------
  2277. Mode   : Amiga
  2278. Syntax : success=MakeDir(name$)
  2279.  
  2280. This function attempts to create a directory called <name$>
  2281. If it is unsuccessfull, 0 is returned else -1 is returned.
  2282.  
  2283.  
  2284.  
  2285. Function: Rename
  2286. -------------------------------------------------------------------------
  2287. Mode   : Amiga
  2288. Syntax : success=Rename(source$,dest$)
  2289.  
  2290. This attempts to rename the file <source$> to <dest$>
  2291.  
  2292. NOTE: It is not possible to rename across devices. -1 is returned if 
  2293. successfull, else 0.
  2294.  
  2295.  
  2296.  
  2297. Function: Timer
  2298. -------------------------------------------------------------------------
  2299. Mode   : Amiga/Blitz
  2300. Syntax : t.l=Timer
  2301.  
  2302. This will return the number of 50ths of a second since startup.
  2303.  
  2304.  
  2305.  
  2306. Function: Lisa
  2307. -------------------------------------------------------------------------
  2308. Mode   : Amiga/Blitz
  2309. Syntax : chipver=Lisa
  2310.  
  2311.    This will return the current Lisa chip version :
  2312.  
  2313.     $00 for OCS Denise
  2314.     $F7 for ECS Denise
  2315.     $F8 for AGA Lisa
  2316.  
  2317.  
  2318.  
  2319. Statement: Reboot
  2320. -------------------------------------------------------------------------
  2321. Mode   : Amiga/Blitz
  2322. Syntax : Reboot
  2323.  
  2324. This will perform a cold reboot
  2325.  
  2326.  
  2327.  
  2328. Function: FileSize
  2329. -------------------------------------------------------------------------
  2330. Mode   : Amiga
  2331. Syntax : size.l=FileSize(filename$)
  2332.  
  2333. This return the length (in bytes) of the file.
  2334.  
  2335.  
  2336. Statement: CacheOff
  2337. -------------------------------------------------------------------------
  2338. Mode   : Amiga/Blitz
  2339. Syntax : Cache Off
  2340.  
  2341. This will turn off the instruction cache of the CPU.
  2342.  
  2343.  
  2344. Function: XOR
  2345. -------------------------------------------------------------------------
  2346. Mode   : Amiga/Blitz
  2347. Syntax : x.l=XOR(x.l,y.l)
  2348.  
  2349. This will perform an Exclusive-Or operation between X and Y and put the
  2350. result back into X 
  2351. e.g
  2352.  
  2353.     x=XOR(%101,%100)
  2354.  
  2355. Will place %001 into X (%101 XOR %100 = %001)
  2356.  
  2357.  
  2358.  
  2359. Function: Max/Min
  2360. ------------------------------------------------------------------------
  2361. Mode   : Amiga/Blitz
  2362. Syntax : value=Max(first_var,second_var)
  2363.          value=Min(first_var,second_var)
  2364.  
  2365. This will compare both values and return either the Higher of the values
  2366. (Max) or the Lower (Min). This currently supports INTEGERs only.
  2367.  
  2368.  
  2369.  
  2370. Function: KeyCode
  2371. ------------------------------------------------------------------------
  2372. Mode   : Amiga/Blitz
  2373. Syntax : keycode=KeyCode
  2374.  
  2375. This will return the status of the keyboard in the form of a keycode.
  2376. You will need to experiment to find out the desired keycode for
  2377. a particular key.
  2378.  
  2379. This merely peeks address $bfec01 and returns the value found.
  2380.  
  2381.  
  2382.  
  2383.             Reflective Images Effects Library
  2384.             =================================
  2385.  
  2386.         By Stephen McNamara, with help from Steve Matty
  2387.                (c)1994 Reflective Images
  2388.  FX COMMANDS 
  2389.  
  2390. Note: The library has had a lot of the commands inside it expanded so 
  2391. that they work on any size bitmap.  At the moment the following, though,
  2392. will only work on lorez bitmaps: ZoomX8, Derez and ZoomXY
  2393.  
  2394. None of the commands in this library use the blitter chip, any blitter 
  2395. source code that anybody has please send to me.
  2396.  
  2397.  
  2398.             Here are all the FX commands:
  2399.  
  2400. Command list:
  2401.              CHUNKYTOPLANAR (SLOW)  
  2402.              CLEARBITMAP            
  2403.              DEREZ                  
  2404.              FADEINBITMAP           
  2405.              INITZOOMXY             
  2406.              PLANARTOCHUNKY (SLOW)  
  2407.              REDUCEX2           
  2408.              ZOOMXY                 
  2409.              ZOOMX2                 
  2410.              ZOOMX4                 
  2411.              ZOOMX8                 
  2412.              =ADDVALUE(BITMAP#,X,Y) 
  2413.  
  2414. No instructions for the planar<>chunky commands since their not really 
  2415. that useful at the moment.  If anybody has some working code thats good
  2416. then.......................
  2417.  
  2418.  
  2419. No instructions for the planar<>chunky commands since their not really 
  2420. that useful at the moment.  What I'm going to try and do is put some
  2421. faster conversion routines in this library to do the jobs of these 
  2422. commands.
  2423.  
  2424.  
  2425.  
  2426. Statement: FadeInBitmap
  2427. --------------------------------------------------------------------------
  2428. Modes : Amiga/Blitz
  2429. Syntax: FadeInBitmap source#,dest#,delay[,offset1,offset2,height]
  2430.  
  2431. This is used to make a low rez, any height, bitmap appear on another
  2432. one in a nice way.  Source# and dest# should be bitmap object numbers
  2433. and delay is the 'slow-down' value for the fade.  This is necessary
  2434. because this routine works very fast - at full speed it looks just like
  2435. a slow screen copy.  You should note that the delay is taken as being a
  2436. word, thus don't pass 0 or you'll actually get a delay of 65535.  This
  2437. routine will adjust itself to take into account the depth of the bitmap,
  2438.  
  2439. WARNING: the depth of the destination bitmap should be AT   LEAST as big
  2440. as the depth of the source# bitmap because the depth of the fade is 
  2441. taken from the source# bitmap.
  2442.  
  2443. The optional parameters in this command allow you to set respectively:
  2444. the source bitmap y offset, the destination bitmap y offset and the
  2445. height of the fade (in pixels).  If these parameters are left out then
  2446. the fade automatically occurs across the full size of the bitmap.
  2447.   
  2448. See:  CLEARBITMAP 
  2449.  
  2450.  
  2451.  
  2452. Statement: ClearBitmap
  2453. --------------------------------------------------------------------------
  2454. Modes : Amiga/Blitz
  2455. Syntax: ClearBitmap source#,delay[,offset,height]
  2456.  
  2457. This is used to clear a low res, any height, bitmap in a very pleasant
  2458. way.  The parameters are the same as for FadeInBitmap except that
  2459. only one bitmap is needed.  The delay parameter i used for the same
  2460. reason as in FadeInBitmap - to slow down the effect.  The optional
  2461. parameters allow you to set a y start value for the clear and the
  2462. height (in pixels) of the clear.
  2463.  
  2464. See:  FADEINBITMAP 
  2465.  
  2466.  
  2467.  
  2468. Statement: ZoomX2
  2469. --------------------------------------------------------------------------
  2470. Modes : Amiga/Blitz
  2471. Syntax: ZoomX2 source#,dest#,add_source,add_dest,width,height
  2472.  
  2473. This command does a very fast X2 zoom.  It works with two bitmaps - one
  2474. source and one dest (note: these can be the same bitmap but you should
  2475. be careful that the zoom is not done over the source data).  The two
  2476. parameters add_source and add_dest allow you to specify the position of
  2477. the start of the zoom, they specified as byte offsets from the top left
  2478. corner of the bitmaps (byte 0).  These values can be calculated by the
  2479. following method:
  2480.  
  2481.     add_source=(Y x BITMAP_WIDTH (in bytes) + (X / 8)
  2482.  
  2483. or by using the built in command ADDValue.  Width and height are both
  2484. specified in pixels.
  2485.  
  2486. NOTE: There is no clipping on this command - be careful not to zoom off
  2487.       the edges of bitmaps. you can zoom from a bitmap to a different 
  2488.       size bitmap BUT the destination bitmap must be as deep as the 
  2489.       source and big enough to hold the zoomed data.
  2490.  
  2491. See:  ZOOMX4 , ZOOMX8 , ADDVALUE 
  2492.  
  2493.  
  2494.  
  2495. Statement: ZoomX4
  2496. --------------------------------------------------------------------------
  2497. Modes : Amiga/Blitz
  2498. Syntax: ZoomX4 source#,dest#,add_source,add_dest,width,height
  2499.  
  2500. This is exactly the same as ZoomX2 except that a times 4 zoom is done
  2501. by this command.
  2502.  
  2503. Note:    You can zoom from a bitmap to a different size bitmap BUT the
  2504.         destination bitmap must be as deep as the source and big enough
  2505.     to hold the zoomed data.
  2506.  
  2507. See:  ZOOMX2 , ADDVALUE 
  2508.  
  2509.  
  2510.  
  2511. Statement: ZoomX8
  2512. --------------------------------------------------------------------------
  2513. Modes : Amiga/Blitz
  2514. Syntax: ZoomX8 source#,dest#,add_source,add_dest,width,height
  2515.  
  2516. This is exactly the same as ZoomX2 except that a times 8 zoom is done
  2517. by this command
  2518.  
  2519. See:  ZOOMX2 , ADDVALUE 
  2520.  
  2521.  
  2522.  
  2523. Function: ADDValue
  2524. --------------------------------------------------------------------------
  2525. Modes : Amiga/Blitz
  2526. Syntax: addval.w=ADDValue(bitmap#,x,y)
  2527.  
  2528. This function can be used the calculate the add_source and add_dest
  2529. values used in all the zoom commands.  Just give the bitmap number, x
  2530. co-ordinate and the y co-ordinate and you'll get an answer back that can
  2531. be used straight in the ZoomXn commands.
  2532.  
  2533. See:  ZOOMX2, ZOOMX4 , ZOOMX8 , ZOOMXY 
  2534.  
  2535.  
  2536. Statement: InitZoomXY
  2537. --------------------------------------------------------------------------
  2538. Modes : Amiga/Blitz
  2539. Syntax: InitZoomXY source#,dest#,add_source,add_dest
  2540.  
  2541. This command initialises the ZoomXY routine to the bitmaps you want it
  2542. to work on.  You MUST use this routine before calling ZoomXY.  The
  2543. parameters are the same as the first four parameter for the ZoomXn
  2544. commands - source and dest bitmaps and add_source/dest values.
  2545.  
  2546. See:  ZOOMXY 
  2547.  
  2548.  
  2549.  
  2550. Statement: ZoomXY
  2551. --------------------------------------------------------------------------
  2552. Modes : Amiga/Blitz
  2553. Syntax: ZoomXY xzoom_value,yzoom_value,height
  2554.  
  2555. This command does a zoom based on the values you give it.  You should
  2556. note, though, that zoom values should be integer values (no fractional
  2557. part).  The height is the height in pixels that the source data should 
  2558. be zomed to.  Please note that this command is different to the other 
  2559. zoom commands in that the output of it is clipped to fit inside 320 
  2560. pixels.
  2561.  
  2562. This command should only be used after InitZoomXY has been called.
  2563. This routine has an extra feature in that if you give both zoom values
  2564. as 1 then a bitmap copy is done from the source to the dest using the
  2565. offsets given and the height.
  2566.  
  2567. See:  INITZOOMXY 
  2568.  
  2569.  
  2570.  
  2571. Statement: Derez
  2572. --------------------------------------------------------------------------
  2573. Modes : Amiga/Blitz
  2574. Syntax: Derez source#,dest#,add_source,add_dest,derez_value,height
  2575.  
  2576. This command is used to derez a low resolution bitmap onto another one.
  2577. The bitmaps are source# and dest#, add_source and add_dest are used to
  2578. control the start position of the derez (see ZoomX2 and ADDValue to see
  2579. how these are calculated).  The derez value if obviously the amount that
  2580. each pixel will be derezed to in both the x and y directions, the height
  2581. is the height of the derez - the derez is clipped to fit inside this in 
  2582. the y direction and inside 320 pixels in the x direction.
  2583. This routine has an extra feature in that if you give derez_value as 1
  2584. then a bitmap copy is done from the source to the dest using the offsets
  2585. given and the height.
  2586.  
  2587.  
  2588. Statement: ReduceX2
  2589. --------------------------------------------------------------------------
  2590. Modes : Amiga/Blitz
  2591. Syntax: ReduceX2 source#,dest#,add_source,add_dest,width,height
  2592.  
  2593. Description:
  2594. This command halves the given rectangle of one bitmap and pastes it onto
  2595. the destination bitmap.  Width should be a multiple of 16, width and 
  2596. height should describe a rectangular area that will be reduced (these 
  2597. values should be in pixels).
  2598.  
  2599. See  ZOOMX2  and other commands for more information about the 
  2600. syntax of this command.
  2601.  
  2602.  
  2603.  
  2604.             Reflective Images Zone-Joystick Library v1.2
  2605.             ============================================
  2606.  
  2607.         By Stephen McNamara, original Joy Library by Steve Matty
  2608.                 (c)1994 Reflective Images
  2609.  
  2610. This library contains commands for setting up zones and testing the status
  2611. of the joysticks attached to the Amiga.
  2612.  
  2613.  ZONE-JOY COMMANDS @NDNODE
  2614.  
  2615.  
  2616.  
  2617.                 Zone-Joy commands:
  2618.  
  2619. Command list:
  2620.                  FREEZONETABLE  
  2621.                  NEWZONETABLE   
  2622.                  SETZONE        
  2623.                  USEZONETABLE   
  2624.                  ZONEINIT       
  2625.                  =ALLFIRE       
  2626.                  =JFIRE         
  2627.                  =JHORIZ        
  2628.                  =JVERT         
  2629.                  =ZONETABLESIZE 
  2630.                  =ZONE          
  2631.                  =ZONETEST      
  2632.                  =ZONETABLE     
  2633.  
  2634.  
  2635. Function: ZoneTableSize
  2636. -------------------------------------------------------------------------
  2637. Modes  : Amiga/Blitz
  2638. Syntax : size.l=ZoneTableSize
  2639.  
  2640. This function returns the size, in zones, of the current zonetable.  It
  2641. is equivalent of doing: size.l=peek.l(ZoneTable).
  2642.  
  2643.  
  2644. Statement/Function: UseZoneTable
  2645. -------------------------------------------------------------------------
  2646. Modes  : Amiga/Blitz
  2647. Syntax : UseZoneTable table#
  2648.  
  2649. This command is used to change the current zonetable to the selected
  2650. one. If used as a function, it will return TRUE for success or FALSE 
  2651. for failure.
  2652.  
  2653. Valid zonetable numbers range from 0 to 15.
  2654.  
  2655.  
  2656. Statement/Function: NewZoneTable
  2657. -------------------------------------------------------------------------
  2658. Modes  : Amiga/Blitz
  2659. Syntax : NewZoneTable table#,size
  2660.  
  2661. This command will attempt to allocate a new zonetable with the given
  2662. table number. If the table already exists it will be deleted.  The 
  2663. maximum size for a zonetable is 65536 zones. If used as a function, this
  2664. command will return FALSE for failure or TRUE for success.  You should 
  2665. note that all zones are automatically reset in the new table and that 
  2666. creating a table does not make it the current table, this must be done
  2667. with UseZoneTable.
  2668.  
  2669. Valid zonetable numbers range from 0 to 15.
  2670.  
  2671. IMPORTANT NOTE: you cannot define the size of zonetable 0.  You cannot
  2672. use this command to alter it in any way.
  2673.  
  2674.  
  2675. Statement/Function: FreeZoneTable
  2676. -------------------------------------------------------------------------
  2677. Modes  : Amiga/Blitz
  2678. Syntax : FreeZoneTable table#
  2679.  
  2680. This command is used to free a zonetable from memory.  If used as a
  2681. function, it will return TRUE or FALSE.  When successfully called, this
  2682. command will free the zonetable and change the currently used zonetable
  2683. to table number 0.
  2684.  
  2685. Valid zonetable numbers range from 0 to 15.
  2686.  
  2687. IMPORTANT NOTE: you cannot free zone table 0.
  2688.  
  2689.  
  2690. Function: ZoneTable
  2691. -------------------------------------------------------------------------
  2692. Modes  : Amiga/Blitz
  2693. Syntax : ad.l=ZoneTable
  2694.  
  2695. This function returns the address in memory of the zone information
  2696. storage area for the current zonetable. The zones are stored one after
  2697. the other, with each zone taking up 8 words (16 bytes) in the data area,
  2698. making a total size of 2048 bytes.  They are stored in the following 
  2699. way:
  2700.  
  2701.         Rectangular:      +0: x1
  2702.                 +2: y1
  2703.                 +4: x2
  2704.                 +6: y2
  2705.  
  2706.         Circular:    +0: x1
  2707.                 +2: y1
  2708.                 +4: radius of zone
  2709.                 +6: -1 <-- this is set to show that the
  2710.                             zone is circular.
  2711.  
  2712.         Undefined zone:    +0: -1
  2713.                 +2: -1
  2714.                 +4: -1
  2715.                 +6: -1
  2716.  
  2717. The first longword (4 bytes) of the zonetable is used to hold the size,
  2718. in zones, of the table (thus the true size of the zonetable is 4+number
  2719. of zones*8).
  2720.  
  2721.  
  2722.  
  2723. Statement: ZoneInit
  2724. ---------------------------------------------------------------------------
  2725. Modes  : Amiga/Blitz
  2726. Syntax : ZoneInit [zone_num]|[start_zone,end_zone]
  2727.  
  2728. This command is used to clear any zones currently set.  The optional
  2729. parameters allow you to select either a single zone or a range of zones
  2730. to reset.
  2731.  
  2732.  
  2733.  
  2734. Statement: Setzone
  2735. ---------------------------------------------------------------------------
  2736. Modes  : Amiga/Blitz
  2737. Syntax : Setzone zone#,x1,y1,radius
  2738.          Setzone zone#,x1,y1,x2,y2
  2739.  
  2740. This command lets you set up zones for testing.  The first version is
  2741. used when you want to set up a circular zone and the second when you 
  2742. want a rectangular one.  With rectangular zones, x1,y1 should be the top
  2743. left corner of the rectangle and x2,y2 should be the bottom left.
  2744.  
  2745. Note: The max zone number is 255.
  2746.       When you use this command, the zone number you give is ANDed with
  2747.       256 so you should ensure that you give a number lower than 256 so
  2748.       that previously defined zones don't get corrupted.
  2749.       Zones can be defined in any order.
  2750.       Circular zones are used in exactly the same way as rectangular
  2751.       ones.
  2752.  
  2753.  
  2754.  
  2755. Function: Zone
  2756. ---------------------------------------------------------------------------
  2757. Modes  : Amiga/Blitz
  2758. Syntax : a.w=Zone(x,y)
  2759.  
  2760. This command takes the co-ordinates x,y and checks to see if they are
  2761. inside any of the defined zones.  The zones are searched in order,
  2762. starting at 0 and going through to 255.  This command will return the
  2763. first zone that the co-ordinates were found to be inside, you should 
  2764. note that both types of zones are tested (rectangular and circular).
  2765.  
  2766. This command returns either -1 for not inside a zone or the zone number.
  2767.  
  2768.  
  2769.  
  2770. Function: ZoneTest
  2771. ---------------------------------------------------------------------------
  2772. Modes  : Amiga/Blitz
  2773. Syntax : a.w=ZoneTest(start_num[,end_num],x,y)
  2774.  
  2775. This command is the same as the Zone command except that it allows you
  2776. to select either one individual zone to test or a range of zones.  You
  2777. should, though, ensure that end_num if greater than start_num.
  2778.  
  2779. This command returns either -1 for not inside a zone or the zone number.
  2780.  
  2781.  
  2782.  
  2783. Function: ZoneTable
  2784. ---------------------------------------------------------------------------
  2785. Modes  : Amiga/Blitz
  2786. Syntax : ad.l=ZoneTable
  2787.  
  2788. This function returns the address in memory of the zone information
  2789. storage area. The zones are stored one after the other, with each zone
  2790. taking up 8 words (16 bytes) in the data area, making a total size of
  2791. 2048 bytes.  They are stored in the following way:
  2792.  
  2793.         Rectangular:      +0: x1
  2794.                 +2: y1
  2795.                 +4: x2
  2796.                 +6: y2
  2797.  
  2798.         Circular:    +0: x1
  2799.                 +2: y1
  2800.                 +4: radius of zone
  2801.                 +6: -1 <-- this is set to show that the
  2802.                             zone is circular.
  2803.  
  2804.         Undefined zone:    +0: -1
  2805.                 +2: -1
  2806.                 +4: -1
  2807.                 +6: -1
  2808.  
  2809.  
  2810.  
  2811. Function: JFire
  2812. ---------------------------------------------------------------------------
  2813. Modes  : Amiga/Blitz
  2814. Syntax : jf.b=JFire(joy#)
  2815.  
  2816. This command tests the fire button status of the joystick joy#, where
  2817. joy# is between 1 and 4.  You should note that, as with all the joystick
  2818. commmands, joy#=1 refers to the Amiga's joystick port, joy#=2 refers to
  2819. the mouse port, and joy#=3 or joy#=4 refer to the four player adapter
  2820.  ports.
  2821.  
  2822. This command returns 0 for fire button not pressed or -1 for pressed
  2823.  
  2824.  
  2825.  
  2826. Function: JHoriz
  2827. ---------------------------------------------------------------------------
  2828. Modes  : Amiga/Blitz
  2829. Syntax : jh.b=JHoriz(joy#)
  2830.  
  2831. This command is used to test the horizontal direction of the selected
  2832. joystick.  It returns:
  2833.  
  2834.         0: No horizontal direction
  2835.              -1: Joystick left
  2836.             1: Joystick right
  2837.  
  2838.  
  2839.  
  2840. Function: JVert
  2841. ---------------------------------------------------------------------------
  2842. Modes  : Amiga/Blitz
  2843. Syntax : jv.b=JVert(joy#)
  2844.  
  2845. This command is used to test the vertical direction of the selected
  2846. joystick.  It returns:
  2847.  
  2848.         0: No vertical direction
  2849.              -1: Joystick up
  2850.             1: Joystick down
  2851.  
  2852.  
  2853.  
  2854. Function: AllFire
  2855. ---------------------------------------------------------------------------
  2856. Modes  : Amiga/Blitz
  2857. Syntax : af.b=AllFire [(bit_pattern)]
  2858.  
  2859. This command is used to test the fire button status of all four
  2860. joysticks.  It returns a byte with the first four bits giving the
  2861. joystick status, false=fire button not pressed, true=fire button 
  2862. pressed. The following bits belong to joysticks:
  2863.  
  2864.         bit 0: joystick 1 (joystick port)
  2865.         bit 1: joystick 2 (mouse port)
  2866.         bit 2: joystick 3 (four player adaptor)
  2867.         bit 3: joystick 4 (four player adaptor)
  2868.  
  2869. The optional bit pattern can be used to restrict the testing of the fire
  2870. buttons.  If a bit in the pattern is clear (false) then the joystick it
  2871. belongs to will not have its fire button tested,
  2872.  
  2873. e.g. AllFire (%0011) will test joysticks 1 and 2 and return the
  2874.      result.  It will return false for joysticks 3 and 4.
  2875.  
  2876.  
  2877.  
  2878. Library: neilsciatrackerlib #56
  2879. --------------------------------------------------------------------------
  2880. Author: Neil O'Rourke, 6 Victoria St, TAMWORTH, NSW 2340, AUSTRALIA
  2881.  
  2882. Overview:
  2883. Many thanks to Neil, from what I have seen on the net there are already 
  2884. many BlitzUsers using this library to great success. I'm trying to fit the
  2885. example code on the disk as I type...
  2886.  
  2887.  QUICK USAGE        AUTHOR'S DOC 
  2888.  
  2889.                            The CIA Tracker commands:
  2890.  
  2891.  BUILDNOTETABLE                GETSONGPOSITION         
  2892.  CHECKTRACKEREVENT             GETTRACKEREVENT                
  2893.  CHECKTRACKERMODULEID          GETTRACKERINSTRUMENT          
  2894.  FREETRACKERMODULE             GETTRACKERLOCATION             
  2895.  GETPATTERNPOSITION            GETTRACKERNAME                  
  2896.  GETSAMPLELENGTH               GETTRACKERNOTE                  
  2897.  GETSAMPLELOCATION             GETTRACKERNOTENUMBER            
  2898.  GETSAMPLENAME                 GETTRACKERSIZE                   
  2899.  GETSONGLENGTH                 GETTRACKERVOLUME                     
  2900.  
  2901.  INITTRACKER                   SETTRACKERMODULE        
  2902.  LOADTRACKERMODULE             SETTRACKERTEMPO          
  2903.  OLDGETTRACKERNOTENUMBER       STARTTRACKER              
  2904.  PAUSETRACKER                  STARTTRACKERPATPOS      
  2905.  PLAYTRACKERSAMPLE             STOPTRACKER             
  2906.  RESTARTTRACKER                WAITTRACKEREVENT            
  2907.  SETDMAWAIT                    
  2908.  SETSONGPATTERNPOSITION    
  2909.  SETTRACKERMASK                  
  2910.  
  2911. Notes:
  2912. ~~~~~~
  2913. Quite a number of these commands extract their data from the playroutine in
  2914. real time; that is, around fifty times a second (depending upon the tempo).
  2915. Therefore, the value your program receives could well be very different
  2916. from what is actually happening in the song.
  2917.  
  2918.  
  2919. Disclaimer:
  2920. ~~~~~~~~~~~
  2921. By installing this software on your system, you are agreeing that I have no
  2922. liability as to the outcome of such use.  If, for example, you use a
  2923. command as documented and a floppy disk is ejected from your disk drive
  2924. with such force that it severs your head from your neck, tough.  Next time,
  2925. duck.
  2926.  
  2927.  
  2928. Author's Documentation: CIATracker.lib Documentation
  2929.  
  2930. Neil O'Rourke
  2931.  
  2932. Version 1.6 (24/6/94)
  2933.  
  2934. Introduction
  2935. ~~~~~~~~~~~~
  2936. The standard soundtracker replay routines supplied with Blitz Basic 2 have
  2937. many faults, which this library attempts to overcome.  Some of the features
  2938. are:
  2939.  
  2940.   - Plays all ST/NT/PT songs that utilise either the VBLANK timing or the
  2941.     more recent CIA based timings
  2942.   - Plays back correctly on 50/60Hz systems, running either PAL or NTSC
  2943.   - Contains more specialised functions for advanced programmers
  2944.   - Enables the programmer to syncronise graphics with their music
  2945.  
  2946.  
  2947. Credits:
  2948. ~~~~~~~~
  2949. Original ProTracker playroutine by Amiga Freelancers, converted and
  2950. enhanced for Blitz by Neil O'Rourke.  Naggings from Roy, Jeff and Richard.
  2951.  
  2952. The 1.6 upgrade
  2953. ~~~~~~~~~~~~~~~
  2954. This is a maintenance upgrade, with some subtle (and not so subtle) bugs
  2955. fixed or noted.
  2956.  
  2957. LoadTrackerModule no longer crashes the machine if the name was invalid.
  2958.  
  2959. SetTrackerMask has been removed for the moment (this was causing the
  2960. TrackerEvent system to foul up)
  2961.  
  2962. WaitTrackerEvent has a nasty tendancy to lock the machine up.  Don't call
  2963. this command, use While NOT CheckTrackerEvent:Wend to wait for an event if
  2964. you must.  WaitTrackerEvent currently sits on the VBLANK interrupt, however
  2965. I think the problem is due to the sheer bulk of ciaTrackerLib getting in
  2966. the way of checking.  I think.
  2967.  
  2968. GetTrackerNoteNumber was found to be chewing up CPU time, and has been
  2969. replaced by a new version that chews up 2K of ram extra.
  2970.  
  2971. I've found that if you have run errors enabled to bring up the requester,
  2972. your module won't start sometimes.  Don't know what to do about this, as I
  2973. don't know what causes it.
  2974.  
  2975.  
  2976. Quick Usage:
  2977. ~~~~~~~~~~~~
  2978. First you must set the DMAWait time with the SetDMAWait command.  Then,
  2979. enable all the channels with SetTrackerMask.  Load the module you want with
  2980. the LoadTrackerModule command, and then either StartTrackerModule it, or
  2981. InitTracker/RestartTracker later on.
  2982.  
  2983.  
  2984.  
  2985. Function: LoadTrackerModule
  2986. --------------------------------------------------------------------------
  2987. Syntax  : success=LoadTrackerModule(TrackerModule#,FileName$)
  2988.  
  2989. Description:
  2990. Loads the named module into chip ram, ready for playing.  This command can
  2991. only be called in Amiga mode.  success is a boolean return code (true).  
  2992. If the load fails for any reason, success returns the AmigaDOS error code.
  2993.  
  2994. Note that there is an implicit call to FreeTrackerModule for whatever
  2995. module you are trying to load.  However, if you want to load another
  2996. module, don't try to load it on top of the existing one that is playing.
  2997. Use another TrackerModule# (you have from 0 to 8).  The results are
  2998. unpredictable, and range from nothing to a system crash.  We can't call
  2999. StopTracker, because this will stop everything.
  3000.  
  3001.  
  3002. Function: StartTracker
  3003. --------------------------------------------------------------------------
  3004. Syntax  : success=StartTracker(TrackerModule#)
  3005.  
  3006. Description:
  3007. Starts to play the requested module, stopping any modules already playing,
  3008. or restarts the current module, and returns true.  Returns false if the
  3009. module couldn't be started for some reason (like it isn't loaded).
  3010.  
  3011.  
  3012. Statement: StopTracker
  3013. --------------------------------------------------------------------------
  3014.  
  3015. Description:
  3016. Stops the current module
  3017.  
  3018.  
  3019. Statement: SetDMAWait
  3020. --------------------------------------------------------------------------
  3021. Syntax   : SetDMAWait value
  3022.  
  3023. Description:
  3024. This sets the DMA Wait for your machine.  On a standard 7.14MHz 68000 
  3025. based machine, the value is the default (300).  However, faster machines 
  3026. can cause the replay routine to skip notes.  On a 25MHz 68030 machine, the
  3027. suggested value is 900.  Set this as low as possible so that you still 
  3028. hear all the notes.  A future upgrade *may* do this automatically, but I 
  3029. have no intention of implementing it at this stage, as I don't know what 
  3030. DMAWait to set for different speed processors and version motherboards.
  3031.  
  3032. DMA wait is important.  Technically, when the replay routine loads the 
  3033. chip registers with the information about the current note (location, 
  3034. volume, pitch), a delay is needed to ensure that the chips actually get 
  3035. the data, which happens on the next DMA slot.  Since the CPU can be 
  3036. clocked independantly of the motherboard, we can't just delay by a set 
  3037. amount.  How this problem has been solved is a busy wait that simply 
  3038. loops around the number of times as specified by the DMAWait value.  
  3039. A low value therefore lessens the load on the CPU but increases the 
  3040. chances of missing notes while playing a song.  Too high a value can bog
  3041. the CPU down, and slow the song down as interrupts are missed.  
  3042.  
  3043.  
  3044. Statement: FreeTrackerModule
  3045. --------------------------------------------------------------------------
  3046. Syntax   : FreeTrackerModule TrackerModule#
  3047.  
  3048. Description:
  3049. This frees a module loaded with LoadTrackerModule.  You cannot free a
  3050. module that has been set up with SetTrackerModule (see below), but there 
  3051. is nothing to stop you trying.
  3052.  
  3053.  
  3054. Statement: SetTrackerModule
  3055. --------------------------------------------------------------------------
  3056. Syntax   : SetTrackerModule TrackerModule#,ModuleAddress
  3057.  
  3058. Description:
  3059. This sets an arbitary area of memory as a tracker module, useful if you
  3060. have BLoaded a file and want to hear if it is a module. Caution: a
  3061. non-module may crash the Amiga.
  3062.  
  3063.  
  3064. Functions: GetTrackerSize & GetTrackerLocation
  3065. --------------------------------------------------------------------------
  3066. Syntax   : trackerlength=GetTrackerSize(TrackerModule#)  
  3067.            GetTrackerLocation (TrackerModule#)
  3068.  
  3069. Description:
  3070. Both these functions return information about the module that has been
  3071. loaded with LoadTrackerModule.  There should be no need to use this
  3072. information, and these commands are only included because they served a
  3073. purpose in debugging a long time ago, and to remove them would cause
  3074. problems with the Blitz tokens
  3075.  
  3076.  
  3077. Function: GetTrackerEvent
  3078. --------------------------------------------------------------------------
  3079. Syntax  : trackerevent=GetTrackerEvent
  3080.  
  3081. Description:
  3082. This command is a customised extension to the ProTracker replay routine. 
  3083. A "TrackerEvent" occurs when the replay routine comes across a $8xx 
  3084. command. This command is not defined in the command list, and many demos 
  3085. (eg Jesus on E's) use it to trigger effects.  This command gets the most 
  3086. recent TrackerEvent, so any program looking at this will have to compare 
  3087. the current value to the value that triggered the current effect.
  3088.  
  3089.  
  3090. Function: CheckTrackerEvent
  3091. --------------------------------------------------------------------------
  3092. Syntax  : success=CheckTrackerEvent
  3093.  
  3094. Description:
  3095. This routine checks to see if a TrackerEvent has occured since the last
  3096. time the routine was called, and returns True if it has.  Use
  3097. GetTrackerEvent to determine what data the $8xx command had.
  3098.  
  3099.  
  3100. Statement: WaitTrackerEvent
  3101. --------------------------------------------------------------------------
  3102.  
  3103. ** V1.6: DO NOT USE THIS COMMAND! **
  3104.  
  3105.  
  3106.  
  3107. Function: CheckTrackerModuleID
  3108. --------------------------------------------------------------------------
  3109. Syntax  : success=CheckTrackerModuleID(TrackerModule#)
  3110.  
  3111. Description:
  3112. This checks the module for the standard Pro/Noise/SoundTracker ID string
  3113. "M.K." (or "M!K!" in the case of a 100 pattern PT module), and returns 
  3114. True if one of them is found.  This means that you can safely call 
  3115. StartTracker.
  3116.  
  3117. Note that there is no 100% guarenteed way of determining what is a module
  3118. and what isn't.  Bit Arts, for example, remove the M.K. identifier to make
  3119. it harder to rip modules, so if you're writing a module ripping program,
  3120. you have to take this result with a grain of salt.
  3121.  
  3122.  
  3123. Function: GetTrackerVolume
  3124. --------------------------------------------------------------------------
  3125. Syntax  : volume=GetTrackerVolume(TrackerChannel#)
  3126.  
  3127. Description:
  3128. Returns the last volume set by a $Cxx command for the named channel, which
  3129. are numbered from 0 to 3.  This is not the "real" volume of the sample that
  3130. is currently playing.
  3131.  
  3132.  
  3133. Function: GetTrackerNote
  3134. --------------------------------------------------------------------------
  3135. Syntax  : note=GetTrackerNote(TrackerChannel#)
  3136.  
  3137. Description:
  3138. Returns the note that the play routine has just played in the named
  3139. channel.  This command is really only useful for graphic bars or simple
  3140. syncronisation of graphics to the music, but for that purpose the
  3141. TrackerEvent commands are far more flexable.  Note that the value returned
  3142. is the period of the note.  You have to look up the note in a period table
  3143. to find out what was actually being played.
  3144.  
  3145.  
  3146. Statement: SetTrackerTempo
  3147. --------------------------------------------------------------------------
  3148. Syntax   : SetTrackerTempo Tempo
  3149.  
  3150. Description:
  3151. Sets the tempo of the current song.  Note that a tempo command ($Fxx) will
  3152. override any value set by this command.  This command is really a stub to
  3153. the actual $Fxx command in the playroutine, and has all the features
  3154. associated with it.  Check your tracker docs for more details.
  3155.  
  3156.  
  3157. Function: GetTrackerInstrument
  3158. --------------------------------------------------------------------------
  3159. Syntax  : instrument=GetTrackerInstrument(TrackerChannel#)
  3160.  
  3161. Description:
  3162. Gets the instrument that is playing in the channel.
  3163.  
  3164.  
  3165. Function: GetPatternPosition
  3166. --------------------------------------------------------------------------
  3167. Syntax  : PatPos=GetPatternPosition
  3168.  
  3169. Description:
  3170. This returns the current position in the current pattern.
  3171.  
  3172.  
  3173. Function: GetSongPosition
  3174. --------------------------------------------------------------------------
  3175. Syntax  : SongPos=GetSongPosition
  3176.  
  3177. Description:
  3178. This returns the current pattern that is playing in the song
  3179.  
  3180.  
  3181. Statement: SetSongPatternPosition
  3182. --------------------------------------------------------------------------
  3183. Syntax   : SetSongPatternPosition Pattern#,Position#
  3184.  
  3185. Description:
  3186. This command sets what pattern to play, and from what position.  Use this
  3187. while a song is playing to jump to another pattern (eg. a game over 
  3188. music). Call StartTrackerPatPos() to start a module from scratch.
  3189.  
  3190.  
  3191. Function: GetSongLength
  3192. --------------------------------------------------------------------------
  3193. Syntax  : NumPatterns=GetSongLength
  3194.  
  3195. Description:
  3196. Returns the number of patterns in the current module.  Useful for displays
  3197. like in IntuiTracker, where the title bar of the window gives a display
  3198. that can be done like:
  3199.  
  3200.   NPrint GetSongLength,":",GetSongPosition
  3201.  
  3202.  
  3203. Statement: SetTrackerMask
  3204. --------------------------------------------------------------------------
  3205. Syntax   : SetTrackerMask Mask
  3206.  
  3207. ** REMOVED IN V1.6 **
  3208.  
  3209.  
  3210. Function: OldGetTrackerNoteNumber
  3211. --------------------------------------------------------------------------
  3212. Syntax  : notenumber=OldGetTrackerNoteNumber(Channel#)
  3213.  
  3214. Description:
  3215. This returns the number of the note played on the specified channel, with
  3216. C-1 being note 1.  Of use really in creating "equalizer bars".
  3217.  
  3218. V1.6: This command has turned out to be a CPU-hog!  The new implementation
  3219. will consume a lot of memory but will be much faster.  When you load your
  3220. old programs, GetTracker... will be replaced by OldGetTracker..., so your
  3221. code will continue to work.
  3222.  
  3223.  
  3224. Function: StartTrackerPatPos
  3225. --------------------------------------------------------------------------
  3226. Syntax  : ret.l=StartTrackerPatPos(TrackerModule#,Pattern#,Position#)
  3227.  
  3228. This starts the named module at the requested pattern and position.  In 
  3229. all other respects it is the same as StartTracker.
  3230.  
  3231.  
  3232. Statements: PauseTracker &  RestartTracker
  3233. --------------------------------------------------------------------------
  3234.  
  3235. Description:
  3236. These commands allow you to stop a tracker module are restart it at a later
  3237. time.
  3238.  
  3239.  
  3240. Statement: PlayTrackerSample
  3241. --------------------------------------------------------------------------
  3242. Syntax   : PlayTrackerSample Sample#,Period,Volume,Channel
  3243.  
  3244. Description:
  3245. Plays a sample through the channel.  The module must not be running.
  3246.  
  3247.  
  3248. Statement: InitTracker
  3249. --------------------------------------------------------------------------
  3250. Syntax   : success=InitTracker(TrackerModule#)
  3251.  
  3252. Description:
  3253. Identical to StartTracker, except that the module doesn't start, but is
  3254. initialised.  Of use with the commands that use the current tracker 
  3255. module. Use ReStartTracker to start playing.
  3256.  
  3257.  
  3258. Function: GetSampleLocation
  3259. --------------------------------------------------------------------------
  3260. Syntax  : location=GetSampleLocation(Sample#)
  3261.  
  3262. Description:
  3263. Returns the address in memory of the named sample in the current module.
  3264.  
  3265.  
  3266. Function: GetSampleLength
  3267. --------------------------------------------------------------------------
  3268. Syntax  : length=GetSampleLength(Sample#)
  3269.  
  3270. Description:
  3271. Returns the length in words of the named sample in the current module.
  3272. Multiply by two to get the byte length.
  3273.  
  3274.  
  3275. Function: GetSampleName
  3276. --------------------------------------------------------------------------
  3277. Syntax  : name$=GetSampleName(Sample#)
  3278.  
  3279. Description:
  3280. Returns the name of the sample in name$.
  3281.  
  3282.  
  3283. Function: GetTrackerName
  3284. --------------------------------------------------------------------------
  3285. Syntax  : name$=GetTrackerName(TrackerModule#)
  3286.  
  3287. Description:
  3288. Returns the name of the module in name$
  3289.  
  3290.  
  3291. Statement: BuildNoteTable
  3292. --------------------------------------------------------------------------
  3293.  
  3294. Description:
  3295. This command builds a note table for use with GetTrackerNoteNumber.  It
  3296. consumes 2K of memory for the look-up table.
  3297.  
  3298.  
  3299. Function: GetTrackerNoteNumber
  3300. --------------------------------------------------------------------------
  3301. Syntax  : notenumber=GetTrackerNoteNumber(Channel#)
  3302.  
  3303. Description:
  3304. This returns the number of the note played on the specified channel, with
  3305. C-1 being note 1.  Of use really in creating "equalizer bars".
  3306.  
  3307. For speed purposes, no error checking (like, has the note table been
  3308. built?) is done.
  3309.  
  3310.  
  3311.  
  3312.     There's not much to tell about the Elmore library, it's GREAT!
  3313.  
  3314.             Library name: ELMORELIB
  3315.              Written by: Richard T. Elmore
  3316.            Copyright: 1994 HeadSoft Software
  3317.               Library number: 111
  3318.  
  3319.  
  3320.              HARDWARE PROGRAMMING   
  3321.              MATH/NUMERIC FUNCTIONS 
  3322.              ARRAY FUNCTIONS        
  3323.              INTUITION PROGRAMMING  
  3324.              STRING HANDLING        
  3325.              LIBRARY PROGRAMMING    
  3326.  
  3327.  
  3328.                             ELMORE HARDWARE LIBRARY
  3329. --------------------------------------------------------------------------
  3330.  
  3331.                                CLICKMOUSE    
  3332.                                FORCENTSC    
  3333.                                FORCEPAL     
  3334.                                FREQ         
  3335.                                QUIET        
  3336.                                RESETTIMER   
  3337.                                VWAITPOS     
  3338.                                =CHECKAGA    
  3339.                                =CHIPFREE    
  3340.                                =DEPTH       
  3341.                                =FASTFREE    
  3342.                                =JOYC        
  3343.                                =LARGESTFREE 
  3344.                                =PEEKTO$     
  3345.                                =TICKS       
  3346.  
  3347.  
  3348.                               ELMORE MATH LIBRARY
  3349. --------------------------------------------------------------------------
  3350.             
  3351.                                 RRANDOMIZE  
  3352.                                 =AVG        
  3353.                                 =AVG.L      
  3354.                                 =AVG.Q      
  3355.                                 =LARGEST    
  3356.                                 =LARGEST.L  
  3357.                                 =LARGEST.Q  
  3358.                                 =RRND       
  3359.                                 =SMALLEST   
  3360.                                 =SMALLEST.L 
  3361.                                 =SMALLEST.Q 
  3362.                                 =XOR                    
  3363.  
  3364.  
  3365.             INTUITION PROGRAMMING 
  3366. --------------------------------------------------------------------------
  3367.  
  3368.                               REQUEST         
  3369.                               SHOWREQUESTORS  
  3370.                               WAITFOR         
  3371.                               =ACTIVESCREEN   
  3372.                               =ACTIVEWINDOW   
  3373.                               =SCREENHEIGHT   
  3374.                               =SCREENWIDTH    
  3375.  
  3376.  
  3377.             STRING HANDELING 
  3378. --------------------------------------------------------------------------
  3379.         
  3380.                                 =BIN#        
  3381.                                 =CHARCOUNT   
  3382.                                 =CHECKSUM    
  3383.                                 =CIPHER$     
  3384.                                 =HEX#        
  3385.                                 =NULL        
  3386.                                 =REPEATS     
  3387.                                 =SEARCHBEGIN 
  3388.                                 =SEARCHBEGIN 
  3389.                                 =SPACE$      
  3390.  
  3391.  
  3392.             LIBRARY PROGRAMMING 
  3393. --------------------------------------------------------------------------
  3394. These functions will return the base address of their 
  3395. respective libraries, for advanced system programming.  Note that 
  3396. register A6 will also be loaded with this address, to make programming
  3397. a bit easier for assembly routines.
  3398.  
  3399.                               COMMODITIEBASE 
  3400.                               DISKFONTBASE   
  3401.                               DOSBASE        
  3402.                               FFPBASE        
  3403.                               GRAPHICSBASE   
  3404.                               ICONBASE       
  3405.                               INTUITIONBASE  
  3406.                               REXXSYSBASE    
  3407.  
  3408.  
  3409.  
  3410. Statement: QUIET 
  3411. ---------------------------------------------------------------------------
  3412. Syntax: Quiet ChannelMask 
  3413. Modes: Amiga or Blitz
  3414.  
  3415. This command will silence the sound channels specified by ChannelMask. 
  3416. See the description for "Envelope" for more information on channelmasks.
  3417.  
  3418.  
  3419. Statement: FREQ
  3420. ---------------------------------------------------------------------------
  3421. Syntax: Freq Channelmask,period
  3422. Modes: Amiga or Blitz
  3423.  
  3424. This command allows you to change the period, or pitch, of the currently 
  3425. playing sound effect. Note that the lower the period, the higher the 
  3426. frequency; Thus, a period of 100 would be very high-pitched, whereas a 
  3427. period of 30000 would be low-pitched.
  3428.  
  3429.  
  3430. Function: TICKS
  3431. ---------------------------------------------------------------------------
  3432. Syntax: Ticks  
  3433. Modes: Amiga or Blitz
  3434.  
  3435. This function returns the number of "ticks" since the Amiga was switched
  3436. on, or since the last "RESETTIMER" command.  The unit of measurement is 
  3437. 1/60 of a second for NTSC machines, and 1/50 of a second for PAL 
  3438. machines.
  3439.  
  3440. See Also:  RESETTIMER 
  3441.  
  3442. END OF PART ONE
  3443.  
  3444.